PS/백준

[백준] 1913번 달팽이 (python 정답 코드)

yo0oni 2024. 10. 10. 15:01

https://www.acmicpc.net/problem/1913

 

달팽이 회전 원리가 헷갈리면 무조건 이 문제 푸는 걸 강추한다.

나는 이 외에도 달팽이 회전 문제를 하도 많이 풀었더니 외워버렸다.. (feat. 상어 시리즈)

 

import sys
input = sys.stdin.readline

N = int(input())
Want = int(input())
board = [[0] * N for _ in range(N)]

di = [-1, 0, 1, 0]
dj = [0, 1, 0, -1]

ci, cj = N // 2, N // 2
max_count, count, flag = 1, 0, 0
dr = 0
num = 1
board[ci][cj] = 1
while (ci, cj) != (0, 0):
    num += 1
    count += 1

    ci, cj = ci + di[dr], cj + dj[dr]
    board[ci][cj] = num

    if count == max_count:
        count = 0
        dr = (dr+1) % 4

        if flag == 0:
            flag = 1
        else:
            flag = 0
            max_count += 1

for i in range(N):
    print(*board[i])

for i in range(N):
    for j in range(N):
        if board[i][j] == Want:
            print(i+1, j+1)
            break