728x90
https://www.acmicpc.net/problem/2630
분할정복 문제중 아마 가장 유명한 문제가 아닐까..
프로그래머스에도 쿼드 압축 후 개수 세기 라는 똑같은 문제가 있다.
각 상황들을 2를 나눈 값으로 분할해가며
같은 색종이로 구성되어있는지 탐색하며
같은 색종이로 구성되어있다면 갯수를 늘려주는 방식을 사용하면 된다.
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
32
33
34
35
36
37
38
39
40
41
42
|
import sys
from math import ceil
input = sys.stdin.readline
li = []
# 0 ,1
answer = [0, 0]
def cnt(x, y, n):
num = li[x][y]
for _ in li[x:x + n]:
for j in _[y:y + n]:
if j != num:
return -1
return num
def divide(x, y, n):
result = cnt(x, y, n)
if result == -1:
divide(x, y, n // 2)
divide(x, y + n // 2, n // 2)
divide(x + n // 2, y, n // 2)
divide(x + n // 2, y + n // 2, n // 2)
return
else:
if result == 1:
answer[1] += 1
else:
answer[0] += 1
return
t = int(input())
for i in range(t):
li2 = list(map(int, input().split()))
li.append(li2)
divide(0, 0, t)
print(answer[0], answer[1], sep='\n')
|
cs |
728x90
'PS > 백준' 카테고리의 다른 글
[백준 1002번] 터렛 (파이썬/python) (0) | 2021.06.15 |
---|---|
[백준 15650번] N과 M (2) (0) | 2021.06.15 |
[백준 2108번] 통계학 (파이썬/python) (0) | 2021.06.15 |
[백준 1874번] 스택 수열 (파이썬/python) (0) | 2021.06.15 |
[백준 1010번 ] 다리 놓기 (파이썬/python) (0) | 2021.06.15 |