SWEA (SW Expert Academy)/D2
[SWEA/D2] 1954 달팽이 숫자 / BFS
hellosonic
2023. 4. 22. 07:05
문제 바로가기
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
나의 코드 및 설명
from collections import deque
def bfs(sx,sy):
queue = deque()
queue.append((sx,sy))
visited[sy][sx] = 1
num = 1
count = 0
while queue:
if num == n*n:
return
x,y = queue.popleft()
nx = x + dx[count%4]
ny = y + dy[count%4]
##if, else 위치 바꾸면 안됨!
if 0<=nx<n and 0<=ny<n and visited[ny][nx] == 0:
nx = nx
ny = ny
else:
count += 1
nx = x + dx[count%4]
ny = y + dy[count%4]
visited[ny][nx] = visited[y][x] + 1
num+=1
queue.append((nx,ny))
t = int(input())
for test_case in range(1, t+1):
n = int(input())
dx = [1,0,-1,0]
dy = [0,1,0,-1]
visited = [[0]*n for _ in range(n)]
bfs(0,0)
print("#{}".format(test_case))
for i in visited:
print(" ".join(map(str, i)))
피드백
bfs 문제를 연습하지 않았다면 풀지 못했을 문제. 그동안 bfs 문제들을 연습한 덕에 풀 수 있었다. 방문처리는 항상 큐에 append할 때 해주어야 하고, if문에 들어가는 조건의 위치를 함부로 바꾸면 안된다는 것을 알 수 있었다.