본문 바로가기
알고리즘

BOJ 1913번 - 달팽이

by eunyoung 2023. 3. 5.

난이도


실버 III

 

 

풀이


구현 문제이다.
주어진 표에 달팽이 모양으로 숫자를 채워야 하는데 이 로직을 생각하는데 좀 어려웠다.

dx와 dy 배열을 두어서 그래프 좌표를 이동하도록 두고, 방향을 바꿔주는 것은 그래프의 범위를 넘어갈때 4를 나눠서 나머지를 통해서 dx,dy를 한칸씩 이동하도록 구현해주었다.

import sys

input = sys.stdin.readline

N=int(input())
num=int(input())

snail=[[0]*N for _ in range(N)]

x,y=0,0
target_x,target_y=0,0
direction=0

dx=[1,0,-1,0]
dy=[0,1,0,-1]

cnt=N**2
snail[x][y]=cnt
cnt-=1

while cnt>0:
    nx=x+dx[direction]
    ny=y+dy[direction]
    if 0<=nx<N and 0<=ny<N and not snail[nx][ny]:
        snail[nx][ny]=cnt
        if cnt==num:
            target_x=nx
            target_y=ny
        x=nx
        y=ny
        cnt-=1
    else:
        direction+=1
        direction=direction%4

for row in snail:
    for x in row:
        print(x,end=" ")
    print("")

print(target_x+1,end=" ")
print(target_y+1)

 

 

 

 

링크


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

 

1913번: 달팽이

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

www.acmicpc.net