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 | 31 |
Tags
- greedy
- dfs
- 생활코딩
- DP
- C언어
- 정수론
- C
- 백준
- programmers
- graph
- BOJ
- Cleancode
- BASIC
- server
- udemy
- 따배씨
- 종만북
- php
- Python
- sorting
- 따라하며 배우는 C언어
- 인프런
- web
- Algospot
- Algorithm
- String
- Math
- 따라하면서 배우는 C언어
- BFS
- JavaScript
Archives
- Today
- Total
몽상실현개발주의
[BOJ] 1992 / 쿼드트리 / Python 파이썬 본문
[BOJ] 1992 / 쿼드트리 / Python 파이썬
https://www.acmicpc.net/problem/1992
풀이
분할정복의 기본적인 문제이다.
재귀를 이용하여 가장 작은 부분문제를 해결하는 것으로 전체의 문제를 해결 할 수 있었다.
- 전체가 같은지 조건을 검사
- 조건에 부합하지 않다면, 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