포도가게의 개발일지

python 백준 2630 색종이 만들기 본문

백준

python 백준 2630 색종이 만들기

grape.store 2021. 8. 15. 20:32
반응형

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