반갑습니다!

[백준] 1913 달팽이 본문

알고리즘 문제 풀이

[백준] 1913 달팽이

김덜덜이 2020. 10. 13. 01:11

풀이

재귀함수를 사용해서 어렵지 않게 구현할 수 있었다. 규칙을 잘 보면 바깥 사각형부터 안쪽으로 갈수록 길이가 2씩 줄어든다는 것을 알 수 있다. 그리고 사각형에서 가장 큰 수의 좌표를 (x, y)라고 하면, 사각형이 줄어들수록 (x+1, y+1)에 가장 큰 수가 있는 것을 알 수 있다. 이런 점을 이용해서 함수를 정의해 사각형의 길이 - 1 만큼의 길이를 for문을 사용해 4번 반복해주었다. 그리고 사각형의 길이를 2씩 줄여가며 재귀 호출해주었다.

코드

Python3

import sys
n = int(sys.stdin.readline().rstrip())
num = int(sys.stdin.readline().rstrip())
arr = [[0] * n for _ in range(n)]
def snail(x, y, len, start):
if len == 0:
arr[y][x] = start
return
for i in range(len):
arr[y + i][x] = start
start -= 1
for i in range(len):
arr[y + len][x + i] = start
start -= 1
for i in range(len):
arr[y + len - i][x + len] = start
start -= 1
for i in range(len):
arr[y][x + len - i] = start
start -= 1
snail(x + 1, y + 1, len - 2, start)
snail(0, 0, n - 1, n * n)
num_x = 0
num_y = 0
for i in range(n):
for j in range(n):
print(arr[i][j], end=' ')
if arr[i][j] == num:
num_x = j
num_y = i
print()
print(num_y + 1, num_x + 1)
view raw 1913.py hosted with ❤ by GitHub

'알고리즘 문제 풀이' 카테고리의 다른 글

[프로그래머스] 3진법 뒤집기  (0) 2020.10.13
[백준] 3135 라디오  (0) 2020.10.13
[백준] 2302 극장 좌석  (0) 2020.10.12
[백준] 1976 여행 가자  (0) 2020.10.09
[백준] 1005 ACM Craft  (0) 2020.10.08