728x90
반응형
문제
홀수인 자연수 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
✔️ Code
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
snail = [[0]*n for _ in range(n)]
# 가운데 1 채우기
x = (n - 1) // 2
y = (n - 1) // 2
snail[x][y] = 1
# 방향벡터 (상, 하, 좌, 우)
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
i = 2
start = 3
while x != 0 or y != 0:
while i <= start * start:
if x == y == (n - 1) // 2
cnt_up, cnt_down, cnt_left, cnt_right = start, start - 1, start - 1, start - 2
x += dx[0]
y += dy[0]
cnt_up -= 1
elif cnt_right > 0: # 우
x += dx[3]
y += dy[3]
cnt_right -= 1
elif cnt_down > 0: # 하
x += dx[1]
y += dy[1]
cnt_down -= 1
elif cnt_left > 0: # 좌
x += dx[2]
y += dy[2]
cnt_left -= 1
elif cnt_up > 0: # 상
x += dx[0]
y += dy[0]
cnt_up -= 1
snail[x][y] = i
i += 1
n -= 2
start += 2
for j in range(len(snail)):
print(*snail[j])
if m in snail[j]:
mx = j + 1
my = snail[j].index(m) + 1
print(mx, my)
728x90
반응형
'백준 > 구현' 카테고리의 다른 글
[백준🥈5] #1316 그룹 단어 체커 (python) (0) | 2022.11.15 |
---|---|
[백준🥈4] #10994 별 찍기 - 19 (python) (0) | 2022.07.06 |
[백준] #20053 최소, 최대 2 (python) (0) | 2022.07.05 |
[백준] #1212 8진수 2진수 (python) (0) | 2022.07.05 |
[백준🥈5] #4396 지뢰찾기 (python) (0) | 2022.07.04 |
댓글