[Python] BOJ 1913 - 달팽이

728x90
반응형

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

 

1913번: 달팽이

N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서

www.acmicpc.net

# 단순 구현 문제이다.

# 가끔 구현문제중에 이러한 형태의 배열을 사용하는 문제들이 나와 포스팅해본다.

 

N = int(input())
target = int(input())
# 상, 우, 하, 좌
dx, dy = [-1, 0, 1, 0], [0, 1, 0, -1]
# 처음 1의 위치 x, y에 넣어줌
if N % 2 == 1:
    x, y = N//2, N//2
else:
    x, y = N//2, N//2 - 1

m = [[0] * N for _ in range(N)]
m[x][y] = 1
cnt = 2
dir = 0
num = 2
while True:
    for _ in range(cnt-1):
        nx, ny = x + dx[dir], y + dy[dir]
        m[nx][ny] = num
        num += 1

        if num == N**2+1:
            break
        x, y = nx, ny

    if num == N**2+1:
        break

    dir = (dir + 1) % 4
    # 위나 아래로 갈때 숫자 1 증가
    if dir == 0 or dir == 2:
        cnt += 1 

for i in m:
    print(*i)
for i in range(N):
    for j in range(N):
        if m[i][j] == target:
            print(i + 1, j + 1)

(solved.ac 티어: 실버 5)

728x90
반응형
TAGS.

Comments