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
- Cleancode
- 인프런
- String
- BOJ
- DP
- sorting
- Math
- 생활코딩
- 따라하면서 배우는 C언어
- greedy
- php
- 백준
- BASIC
- 정수론
- udemy
- Python
- JavaScript
- dfs
- BFS
- web
- server
- 따라하며 배우는 C언어
- programmers
- C
- 따배씨
- 종만북
- Algorithm
- C언어
- graph
- Algospot
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 1992 / 쿼드트리 / Python 파이썬 본문
[BOJ] 1992 / 쿼드트리 / Python 파이썬
https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
풀이
분할정복의 기본적인 문제이다.
재귀를 이용하여 가장 작은 부분문제를 해결하는 것으로 전체의 문제를 해결 할 수 있었다.
- 전체가 같은지 조건을 검사
- 조건에 부합하지 않다면, 1 - 2 - 3- 4 분면으로 나누기
- 나눠진 4분면들을 각각 검사
- 조건에 부합하지 않다면, 1 - 2 - 3- 4 분면으로 나누기
- 부분 문제가 가장 작은 문제가 되거나, 조건에 부합할때 까지 반복
- 전체 문제의 해결
import sys
input = sys.stdin.readline
def DFS(y, x, n):
# 가장 작은 단위
if n == 1:
print(maps[y][x], end="")
return
# 조건 검사
for i in range(y, y+n):
for j in range(x, x+n):
# 조건에 부합하지 않으면, 4분면으로 나눠서 검사
if maps[y][x] != maps[i][j]:
print("(", end="")
DFS(y, x, n//2)
DFS(y, x+n//2, n//2)
DFS(y+n//2, x, n//2)
DFS(y+n//2, x+n//2, n//2)
print(")", end="")
return
# 조건 부합
print(maps[y][x], end="")
return
N = int(input())
maps = []
for _ in range(N):
maps.append(list(map(int, list(input().rstrip()))))
DFS(0, 0, N)
'Algorithm PS > BOJ' 카테고리의 다른 글
[BOJ] 11729 / 하노이 탑 이동 순서 / Python 파이썬 (0) | 2021.06.23 |
---|---|
[BOJ] 1780 / 종이의 개수 / Python 파이썬 (0) | 2021.06.22 |
[BOJ] 11728 / 배열 합치기 / Python 파이썬 (0) | 2021.06.21 |
[BOJ] 10816 / 숫자 카드 2 / Python 파이썬 (0) | 2021.06.19 |
[BOJ] 10815 / 숫자 카드 / Python 파이썬 (0) | 2021.06.19 |
Comments