밑변의 길이와 높이가 n인 삼각형에서 맨 위 꼭짓점부터 반시계 방향으로 달팽이 채우기를 진행
첫 행부터 마지막 행까지 모두 순서대로 합친 새로운 배열을 return.
programmers.co.kr/learn/courses/30/lessons/68645
풀이
- 수학적 공식이 있나 잠깐 생각했지만 그걸 알아내는 시간이 더 걸릴 것 같아서 (후에 검색해보니 없댄다!),
삼각형 모양 배열을 먼저 초기화해주고,
실제 달팽이 모양으로 숫자를 채워준 후,
배열을 flatten하여 리턴하는 방식으로 풀었다.
- 달팽이 모양으로 숫자를 채우는 알고리즘을 짜는데 쓸데없이 고민을 많이 했지만 ㅠ 결국 풀게된 방법은 쉬웠다!
~> 어차피 채울 때는 한 방향으로, 일정 횟수만큼 채움 (아래로는 n번, 오른쪽으로는 n-1번, 위쪽으로는 n-2번)
~> 따라서 한 획씩, 모든 칸이 채워질 때까지 loop 돌림
파이썬 구현
def solution(n):
answer = []
# 2차원 list 초기화
for i in range(1, n+1):
answer.append([0]*i)
i = -1
j = 0
count = 0
while n > 0:
# 아래쪽으로 채움
for x in range(n):
i += 1
count += 1
answer[i][j] = count
# 오른쪽으로 채움
for x in range(n-1):
j += 1
count += 1
answer[i][j] = count
# 위쪽으로 채움
for x in range(n-2):
i -= 1
j -= 1
count +=1
answer[i][j] = count
n -= 3
# 1차원배열로 flatten
final = [x for y in answer for x in y]
return final
메모
- 배열을 1차원으로 flatten할 때,
numpy library를 사용하는 법을 기억하자.
(빠르기 때문)
~> 하지만 이 문제에서는 쓸 수 없는데, numpy는 온전한 행렬 (nxm)의 경우에만 쓸 수 있기 때문.
다차원 배열을 1차원으로 flatten하는 다양한 방법을 아주 잘 설명해 주신 포스트
참고 - blog.winterjung.dev/2017/04/21/list-of-lists-to-flatten
'프로젝트들 > 코딩 테스트' 카테고리의 다른 글
[코딩테스트] 프로그래머스 - 땅따먹기 (Lv.2) in Python (0) | 2021.02.17 |
---|---|
[코딩테스트] 프로그래머스 - 구명 보트 (Lv.2) in 파이썬 Python (0) | 2021.02.16 |
[코딩테스트] 프로그래머스 - 다리를 지나는 트럭 (Lv.2) in Python (0) | 2021.02.15 |
[코딩테스트] 프로그래머스 - 124 나라의 숫자 (Lv.2) in 파이썬 Python (0) | 2021.02.15 |
[코딩테스트] 프로그래머스 - 기능 개발 (Lv.2) in Python 파이썬 (0) | 2021.02.14 |
댓글