문제 설명 및 제한사항
아이디어 및 해결 방법
코드
def solution(n):
if n == 1:
return [1]
# n x n 배열을 만들어서,
# r번째 행의 r+1번째 열 이후부터 -1을 채운다.
arr = [[0] * n for _ in range(n)]
for r in range(n):
for i in range(r+1, n):
arr[r][i] = -1
d = 'down' # down, right, up 중 하나
r, c = 0, 0
cnt = 1
while cnt <= n*(n+1)//2:
arr[r][c] = cnt
if d == 'down':
r += 1
if r == n-1:
d = 'right'
elif arr[r+1][c] != 0:
d = 'right'
elif d == 'right':
c += 1
if c == n-1:
d = 'up'
elif arr[r][c+1] == -1 or arr[r][c+1] != 0:
d = 'up'
elif d == 'up':
r -= 1
c -= 1
if arr[r-1][c-1] != 0:
d = 'down'
cnt += 1
answer = []
for row in arr:
for v in row:
if v == -1:
break
else:
answer.append(v)
return answer
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges