menulogo

[Python] SWEA 1954 달팽이 숫자

@corinthioniaMay 10, 2024

문제 링크

1954. 달팽이 숫자

풀이

  • 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 뱀 코드