반응형
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이 되면 반복문을 빠져나온다.
반응형
'알고리즘 > 구현' 카테고리의 다른 글
[백준][Python] 14503번 로봇 청소기 (0) | 2023.04.04 |
---|---|
[프로그래머스][Python] n^2배열 자르기 (0) | 2023.02.23 |
[백준][Python] 14891번 톱니바퀴 (0) | 2022.11.30 |
[백준][Python] 1475번 방 번호 (0) | 2022.11.18 |
[백준][Python] 21918번 전구 (0) | 2022.06.21 |
댓글