[ProblemSolving] 백준 - 1913 달팽이 (구현)
문제 링크
문제 설명
홀수인 자연수 N이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N×N의 표에 채울 수 있다.
9 2 3
8 1 4
7 6 5
25 10 11 12 13
24 9 2 3 14
23 8 1 4 15
22 7 6 5 16
21 20 19 18 17
N이 주어졌을 때, 이러한 표를 출력하는 프로그램을 작성하시오. 또한 N2 이하의 자연수가 하나 주어졌을 때, 그 좌표도 함께 출력하시오. 예를 들어 N=5인 경우 6의 좌표는 (4,3)이다.
입력
첫째 줄에 홀수인 자연수 N(3 ≤ N ≤ 999)이 주어진다. 둘째 줄에는 위치를 찾고자 하는 N2 이하의 자연수가 하나 주어진다.
출력
N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.
예제 입력1
7
35
예제 출력1
49 26 27 28 29 30 31
48 25 10 11 12 13 32
47 24 9 2 3 14 33
46 23 8 1 4 15 34
45 22 7 6 5 16 35
44 21 20 19 18 17 36
43 42 41 40 39 38 37
5 7
나의 풀이
구현
문제
바깥쪽에서 안쪽으로 이동하면서 좌표를 채워나간다.
이동 순서는 '하 우 상 좌'로 direction은 '0 : 하, 1: 우, 2: 상, 3:좌'를 의미한다.
출발점 위치는 (0,0)이고, while문에서 start_num은 n*n -> ... ->0이 될 때까지 반복한다.
코드
n = int(input())
idx = int(input())
arr = [[0]*n for _ in range(n)]
start_num = n*n
# 하 우 상 좌
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]
x = 0
y = 0
# 0 : 하, 1: 우, 2: 상, 3:좌
direction = 0
while True:
if start_num==0:
break
arr[x][y] = start_num
nx = x + dx[direction]
ny = y + dy[direction]
if nx >= n or nx < -1 or ny >= n or ny < -1 or arr[nx][ny] != 0:
if direction == 3:
direction = 0
else:
direction = direction + 1
x = x + dx[direction]
y = y + dy[direction]
start_num = start_num -1
for i in range(n):
if idx in arr[i]:
ky = arr[i].index(idx)
kx = i
for j in range(n):
print(arr[i][j], end = ' ')
print()
print(kx+1, ky+1)
Author And Source
이 문제에 관하여([ProblemSolving] 백준 - 1913 달팽이 (구현)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@redcarrot01/ProblemSolving-백준-1913-달팽이-구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)