728x90
나의 풀이
from collections import deque
def solution(n):
dx, dy = [0, 1, -1], [1, 0, -1]
snail, answer = [[0] * (i + 1) for i in range(n)], []
queue = deque([(0, 0, 1, 0)])
while queue:
x, y, num, i = queue.popleft()
snail[y][x] = num
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx <= ny < n and not snail[ny][nx]:
queue.append((nx, ny, num + 1, i))
else:
i = (i + 1) % 3
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx <= ny < n and not snail[ny][nx]:
queue.append((nx, ny, num + 1, i))
else:
break
for floor in snail:
answer.extend(floor)
return answer
2차원 배열 sum을 활용한 풀이
def solution(n):
dx=[0,1,-1];dy=[1,0,-1]
b=[[0]*i for i in range(1,n+1)]
x,y=0,0;num=1;d=0
while num<=(n+1)*n//2:
b[y][x]=num
ny=y+dy[d];nx=x+dx[d];num+=1
if 0<=ny<n and 0<=nx<=ny and b[ny][nx]==0:y,x=ny,nx
else:d=(d+1)%3;y+=dy[d];x+=dx[d]
return sum(b,[])
반응형
'Coding Test > Programmers' 카테고리의 다른 글
[프로그래머스/파이썬] 교점에 별 만들기 (0) | 2022.06.17 |
---|---|
[프로그래머스/파이썬] 영어 끝말잇기 (0) | 2022.06.17 |
[프로그래머스/파이썬] 2개 이하로 다른 비트 (0) | 2022.06.16 |
[프로그래머스/파이썬] [1차] 프렌즈4블록 (0) | 2022.06.16 |
[프로그래머스/파이썬] 피로도 (0) | 2022.06.16 |