달팽이(백준 1913번)
💡 **Check Point !
( 해당사항 ✓체크 )
막힘 없이 수월하게 풀린 문제인가?
1시간이내로 풀렸던 문제인가?
1시간 이상 or 며칠을 두고 풀어봤더니 풀린 문제인가?
시간을 써도 도무지 풀 수 없는 문제인가?
솔루션을 찾아봤는가?✓
난이도 체감
최상
상✓
중
하
이해도
완벽히 이해✓
다소 헷갈리는 부분들이 있음
이해 못함
문제
홀수인 자연수 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)이다.
나의 풀이(정답 참고)
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
38
39
40
N=int(input())
number=int(input())
x=N//2
y=N//2
dx=[0,1,0,-1]
dy=[1,0,-1,0]
length=2
my_map=[[1]*N for _ in range(N)]
while x and y:
for i in range(4):
if i==0:
pre_num=my_map[x][y]
x=x+dx[3]
y=y+dy[3]
my_map[x][y]=pre_num+1
for _ in range(length-1):
pre_num=my_map[x][y]
x=x+dx[i]
y=y+dy[i]
my_map[x][y]=pre_num+1
else:
for _ in range(length):
pre_num=my_map[x][y]
x=x+dx[i]
y=y+dy[i]
my_map[x][y]=pre_num+1
length+=2
a_x=0
a_y=0
for i in range(N):
for j in range(N):
print(my_map[i][j],end=' ')
if my_map[i][j]==number:
a_x=i+1
a_y=j+1
print('')
print(a_x,a_y)
- 가운데부터 {상우, 하하, 좌좌, 상상}, {상우우우, 하하하하, 좌좌좌좌, 상상상상} … 의 규칙을 갖는다. 따라서 해당 규칙에 따라 코드를 작성하였다.
- 구현에서는 규칙을 찾는 것이 매우 중요한 것 같다.
This post is licensed under CC BY 4.0 by the author.