포도가게의 개발일지
python 백준 2630 색종이 만들기 본문
반응형
1. 저번주에 했던 Z그리기를 응용하여 비교적 간단하게 작성할 수 있었다
- 재귀를 하는 경우 arr를 계속 새로 만들다 보면 메모리 초과나는 경우가 있어 검색 범위를 나누는 쪽으로 접근했다
import sys
def recurs(n,w_start,w_end,h_start,h_end):
if n < 2:
return
global zero_count, one_count
zero_check = 0
one_check = 0
for i in range(h_start,h_end):
for j in range(w_start,w_end):
if arr[i][j] == 0:
zero_check += 1
if arr[i][j] == 1:
one_check += 1
if zero_check == 0 and one_check>0:
one_count += 1
#print('only 1',w_start,h_start,zero_check,one_check,zero_count,one_count)
if zero_check > 0 and one_check==0:
zero_count += 1
#print('only 0',w_start,h_start,zero_check,one_check,zero_count,one_count)
if zero_check > 0 and one_check>0 and n == 2:
one_count += one_check
zero_count += zero_check
#print('n = 2',w_start,w_end,h_start,h_end,zero_check,one_check,zero_count,one_count)
if zero_check > 0 and one_check>0:
recurs(n//2,w_start,(w_start+w_end)//2,h_start,(h_start+h_end)//2)
recurs(n//2,(w_start+w_end)//2,w_end,h_start,(h_start+h_end)//2)
recurs(n//2,w_start,(w_start+w_end)//2,(h_start+h_end)//2,h_end)
recurs(n//2,(w_start+w_end)//2,w_end,(h_start+h_end)//2,h_end)
num = int(sys.stdin.readline())
arr = []
for k in range(num):
tmp = []
for x in map(int,sys.stdin.readline().split()):
tmp.append(x)
arr.append(tmp)
zero_count = 0
one_count = 0
recurs(num,0,num,0,num)
print(zero_count)
print(one_count)
'백준' 카테고리의 다른 글
python 백준 1987 알파벳 (0) | 2021.08.20 |
---|---|
python 백준 7569번 토마토 (0) | 2021.08.20 |
python 백준 2470번 두 용액 (0) | 2021.08.15 |
python 백준 2110번 공유기 설치 (0) | 2021.08.15 |
python 백준 2805번 나무자르기 (0) | 2021.08.15 |
Comments