본문 바로가기
알고리즘/구현

[백준][Python] 1913번 달팽이

by 임짠짠 2023. 2. 24.
반응형
 

1913번: 달팽이

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

www.acmicpc.net

 

코드

n = int(input())
num = int(input())
dx = [-1,0,1,0]
dy = [0,1,0,-1]  # 상, 우, 하, 좌 순서
graph = [[0]*n for _ in range(n)]
number = 2
x = n//2
y = n//2
graph[x][y] = 1
repeat = 1
i = 0 # dx,dy 가리키는 변수

answer = [x+1,y+1]
while x!=0 or y !=0:
   flag = 0
   for _ in range(2):
      for _ in range(repeat):
         x += dx[i]
         y += dy[i]
         graph[x][y] = number
         if number == num:  # 위치를 찾고자 하는 자연수이면 answer에 위치 저장
            answer = [x+1,y+1] 
         if x == 0 and y == 0: 
            flag = 1
            break
         number += 1
      if flag == 1: break
      i = (i+1)%4
   repeat += 1

for i in graph:
   print(*i)
   
print(*answer)

 

설명

숫자가 채워지는 패턴이 (상), (우), (하, 하), (좌, 좌), (상, 상, 상), (우, 우, 우) ... 

위와 같이 2번씩 1번 반복, 2번 반복, 3번 반복, ... 으로 늘어난다.

x, y가 모두 0이 되면 반복문을 빠져나온다.

 

반응형

댓글