반응형
문제
홀수인 자연수 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번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 출력한다.
풀이
n = int(input())
n2 = int(input())
ans = [[0 for _ in range(n)] for _ in range(n)]
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0]
x, y = n//2, n//2
ans[x][y] = 1
num = 2
tx, ty = 0, 0
if n2 == 1:
tx, ty = n//2+1, n//2+1
for i in range(1, n//2+1):
if num == 2:
nx, ny = x-1, y-1
else:
nx, ny = nx-1, ny-1
step = i*2
for j in range(4):
for k in range(step):
nx+=dx[j]
ny+=dy[j]
ans[nx][ny] = num
if num == n2:
tx, ty = nx+1, ny+1
num+=1
for i in range(n):
print(*ans[i])
print(tx,ty)
반응형
'Develop > 알고리즘' 카테고리의 다른 글
[백준/Python] Bronze I #10163 색종이 (0) | 2023.12.05 |
---|---|
[백준/Python] Bronze I #1268 임시 반장 정하기 (0) | 2023.12.05 |
[백준/Python] Silver V #10826 피보나치 수 4 (0) | 2023.12.04 |
[백준/Python] Silver III #24060 알고리즘 수업 - 병합 정렬 1 (0) | 2023.12.04 |
[백준/Python] Silver V #8979 올림픽 (0) | 2023.12.04 |
Comment