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 |
Tags
- 자바
- 10819 파이썬
- 백준 2096
- 안드로이드 hilt
- 자료구조
- git local remote
- 백준 5582
- 코루틴 플로우
- 1806 백준
- 2096 파이썬
- 1003 파이썬
- 이진 탐색
- Coroutine Flow
- Jetpack Room
- flow buffering
- Android Room
- 1753 다익스트라
- 5582 파이썬
- 백준 10819
- 1806 투포인터
- 투포인터 알고리즘
- 5582 DP
- android hilt
- 백준 1644
- 1806 파이썬
- 1753 파이썬
- java
- Android mvp
- 1644 파이썬
- 6588 파이썬
Archives
- Today
- Total
Gemstone's Devlog
[백준] 1992번: 쿼드트리 (분할정복) 본문
https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
이 문제는 분할정복으로 접근해야 하는 문제이다.
풀이 방법은 다음과 같다.
1. 모두 0이나 1로 되어있지 않은 경우(조건이 만족하지 않은 경우) 4개로 쪼개서 다시 푸는 방식이다.
조건이 만족하지 않는 경우 괄호 "("를 넣고, 4개로 쪼개고 나서 각 처리를 다 하고 나면, 다시 괄호 ")"를 넣는다.
2. 4개로 쪼개는 것은 재귀함수를 호출하여 풀고, 전달 인자로 그 사분면의 가장 왼쪽 위의 좌표와 크기를 넣는다.
3. 조건이 만족하는 경우(모두 0이나 1로 되어있는 경우)는 해당 색상의 값(0이나 1)을 출력해준다.
파이썬 풀이
n = int(input())
graph = [list(map(int, input())) for _ in range(n)]
# devide and conquer 분할정복
def dnc(x, y, n):
check = graph[x][y]
for i in range(x, x + n):
for j in range(y, y + n):
if check != graph[i][j]:
check = -1
break
if check == -1:
print("(", end='')
n = n // 2
dnc(x, y, n) # 1사분면
dnc(x, y + n, n) # 2사분면
dnc(x + n, y, n) # 3사분면
dnc(x + n, y + n, n) # 4사분면
print(")", end='')
elif check == 1:
print(1, end='')
else:
print(0, end='')
dnc(0, 0, n)
'Data Structure & Algorithms' 카테고리의 다른 글
[백준] 5582번: 공통 부분 문자열 (다이나믹 프로그래밍) (0) | 2022.03.31 |
---|---|
[백준] 1806번: 부분합 (투포인터) (0) | 2022.03.29 |
[백준] 2133번: 타일 채우기 (다이나믹 프로그래밍) (0) | 2022.03.28 |
[Codeforces] 768B: Code For 1 (0) | 2022.03.27 |
[Codeforces] 448C: Painting Fence (0) | 2022.03.27 |