출처: [백준] 1913번 달팽이
시간 제한
메모리 제한
제출
정답
맞은 사람
정답 비율
2 초
128 MB
6337
3430
2684
55.045%
문제 홀수인 자연수 N이 주어지면, 다음과 같이 1부터 N2까지의 자연수를 달팽이 모양으로 N×N의 표에 채울 수 있다.
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
예제 출력 1 1 2 3 4 5 6 7 8 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
출처
알고리즘 분류
소스코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 import sysinput = sys.stdin.readlineN = int (input ()) M = int (input ()) snail = [[0 for _ in range (N)] for _ in range (N)] move = [(1 , 0 ), (0 , 1 ), (-1 , 0 ), (0 , -1 )] cur_num = N ** 2 cur_x, cur_y = 0 , 0 direction = 0 while cur_num > 0 : snail[cur_y][cur_x] = cur_num ny, nx = move[direction] dx = cur_x + nx dy = cur_y + ny if 0 > dx or dx >= N or 0 > dy or dy >= N or snail[dy][dx] != 0 : direction = (direction + 1 ) % 4 ny, nx = move[direction] cur_x += nx cur_y += ny cur_num -= 1 temp_x, temp_y = 0 , 0 for i in range (N): for j in range (N): if snail[i][j] == M: temp_x = j temp_y = i print (snail[i][j], end=" " ) print () print (temp_y + 1 , temp_x + 1 )