코딩테스트 연습 - 삼각 달팽이
- 엄청 어려웠다. 결국 다른 사람 풀이를 참조했다.
- DFS/BFS 유형의 문제 같다.
- 풀이의 흐름
- 방향에 따른 좌표 값의 증감을 미리 정해둔다.
- 같은 방향으로 진행하면서 값을 넣어주고 범위를 벗어나려고 하면 방향을 바꾼다. 방향을 바꿀 때 방향을 그것을 3으로 나눈 나머지로 한다.
- 정해진 숫자만큼 칸을 다 채웠으면 리스트에 담는다.
def solution(n):
dx = [1, 0, -1] # 세로
dy = [0, 1, -1] # 가로
board = [[0] * (n) for _ in range(n)]
count = 1 # 채울 숫자
x, y = 0, 0
direction = 0
end_count = (n * (n + 1)) / 2
while end_count >= count:
if (0 <= x < n) and (0 <= y < n) and (board[x][y] == 0):
board[x][y] = count
count += 1
else:
x -= dx[direction]
y -= dy[direction]
direction = (direction + 1) % 3
x += dx[direction]
y += dy[direction]
answer = []
for x in range(n):
for y in range(0, x + 1):
answer.append(board[x][y])
return answer