풀이 과정
- 위 그림을 보면 바깥쪽 삼각형을 채우고, 안쪽 삼각형을 채우는 구조로 볼 수 있다.
- 삼각형을 채울 때는, 맨 위 시작점을 기준 3가지 과정을 거친다.
- 아래로 이동
- 우측으로 이동
- 왼쪽 위 대각선으로 이동
- 시작점을 조정해 가면서 2번 과정을 거치면 된다.
- 시작점의 경우 (0, 0), (2, 1), ... (2n, n)
- 종료 조건은 모든 삼각형을 채운 경우이다.
소스 코드
def solution(n):
lists = [[0] * i for i in range(1, n+1)]
idx = 1
i = 0
while True:
x = 2 * i
y = i
i += 1
# 아래 내려가는 부분
while x < n and lists[x][y] == 0:
lists[x][y] = idx
x += 1
idx += 1
x -= 1
# 오른쪽 진행
y += 1
while y < x+1 and lists[x][y] == 0:
lists[x][y] = idx
y += 1
idx += 1
y -= 1
# 대각선 왼쪽 위 진행
x -= 1; y -= 1
while lists[x][y] == 0:
lists[x][y] = idx
x -= 1
y -= 1
idx += 1
# 전체 체크
end = True
for l in lists:
for e in l:
if e == 0:
end = False
break
if not end:
break
if end:
break
answer = []
# 정답 저장
for l in lists:
for e in l:
answer.append(e)
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges
'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글
[ 위클리 챌린지 ] [ 2주차 ] 상호 평가 (0) | 2021.08.19 |
---|---|
[ Lv 1 ] [ String ] 숫자 문자열과 영단어 (0) | 2021.08.19 |
[ Lv 2 ] 후보키 (0) | 2021.08.13 |
[ Lv 3 ] [ DFS ] 여행경로 (0) | 2021.08.13 |
[ Lv 3 ] 줄 서는 방법 (0) | 2021.07.26 |