Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 위상정렬
- 백트래킹
- 에라토스테네스의 체
- 플로이드-와샬
- 알고리즘
- 완전탐색
- 백준
- 투 포인터
- 문자열
- Network
- Kotlin
- 동적계획법
- swea
- 수학
- 스택
- 시뮬레이션
- JUnit 5
- 유니온 파인드
- 세그먼트 트리
- Effective Java
- 프로그래머스
- 그리디
- 후니의 쉽게 쓴 시스코 네트워킹
- java
- CS
- dfs
- 이분탐색
- BFS
- 구현
- mst
Archives
반갑습니다!
[백준] 1913 달팽이 본문
풀이
재귀함수를 사용해서 어렵지 않게 구현할 수 있었다. 규칙을 잘 보면 바깥 사각형부터 안쪽으로 갈수록 길이가 2씩 줄어든다는 것을 알 수 있다. 그리고 사각형에서 가장 큰 수의 좌표를 (x, y)라고 하면, 사각형이 줄어들수록 (x+1, y+1)에 가장 큰 수가 있는 것을 알 수 있다. 이런 점을 이용해서 함수를 정의해 사각형의 길이 - 1 만큼의 길이를 for문을 사용해 4번 반복해주었다. 그리고 사각형의 길이를 2씩 줄여가며 재귀 호출해주었다.
코드
Python3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
'알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스] 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 |