[Python] SWEA 1954 달팽이 숫자
@corinthioniaMay 10, 2024
문제 링크
풀이
- N이 10 이하의 숫자이기 때문에 2차원 배열을 사용해도 괜찮아 보인다.
- 나의 풀이의 핵심은 [→ ↓ ← ↑] 이 방향으로 순환한다는 것을 이용한 것!
dx
dy
를 이용해서 위의 화살표 방향으로 이동하는 모습을 구현했다.
tried
변수는 while 문의 종료를 위해 추가했다.- 만약 마지막 숫자를 입력한 경우, 이후에도 해당 칸을 기준으로 상하좌우를 살피게 된다.
- 이때 새로운 숫자를 넣을 수 있는 칸이 더이상 없으므로
tried
를 1씩 증가시키게 된다. - 이렇게 상하좌우 모두 새로운 숫자를 넣을 수 없으므로
tried
는 4가 된다. - 즉
tried
가 4 라는 말은 더 이상 숫자를 넣을 칸이 없다는 뜻이므로 반복문을 탈출한다.
코드
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
for tc in range(1, int(input()) + 1):
N = int(input())
print(f'#{tc}')
graph = [[0 for _ in range(N)] for _ in range(N)]
x, y = 0, 0
insert_value = 1
graph[x][y] = insert_value
d_idx = 0
tried = 0
while tried < 4:
x += dx[d_idx]
y += dy[d_idx]
if x < 0 or y < 0 or x >= N or y >= N or graph[x][y] != 0:
tried += 1
x -= dx[d_idx]
y -= dy[d_idx]
if d_idx == 3:
d_idx = 0
else:
d_idx += 1
continue
tried = 0
insert_value += 1
graph[x][y] = insert_value
for row in graph:
for val in row:
print(val, end=' ')
print()
← 이전 글[Node.js | JavaScript] 백준 3190 뱀 코드