반응형
코드
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 |
댓글