ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준] 1780. 종이의 개수 / 파이썬(Python)
    코테 준비/분할정복 2023. 1. 9. 23:16
    n=int(input())
    graph=[[0]*n for _ in range(n)]
    for i in range(n):
        graph[i]=list(map(int,input().split()))
    minus_one=0
    zero=0
    one=0
    def  paper_num(n,div_graph):
        global minus_one
        global zero
        global one
        count=0
        zero_count=0
        for i in range(n):
            count+=sum(div_graph[i])
            zero_count+=div_graph[i].count(0) # 0의 개수 count
        if count==n**2: # 전부다 1일 때
            one+=1
        elif count==-(n**2): # 전부다 -1일 때
            minus_one+=1
        elif zero_count==n**2: # 0의 개수가 n제곱과 같을 때
            zero+=1
        else:
            divide=[div_graph[i][:n//3] for i in range(n//3)] #사각형 9개로 나눴을 때 왼쪽 위
            paper_num(n//3,divide)
            divide=[div_graph[i][n//3:(2*n)//3] for i in range(n//3)]
            paper_num(n//3,divide)
            divide=[div_graph[i][(2*n)//3:] for i in range(n//3)]
            paper_num(n//3,divide)
            divide=[div_graph[i][:n//3] for i in range(n//3,(2*n)//3)]
            paper_num(n//3,divide)
            divide=[div_graph[i][n//3:(2*n)//3] for i in range(n//3,(2*n)//3)]
            paper_num(n//3,divide)
            divide=[div_graph[i][(2*n)//3:] for i in range(n//3,(2*n)//3)]
            paper_num(n//3,divide)
            divide=[div_graph[i][:n//3] for i in range((2*n)//3,n)]
            paper_num(n//3,divide)
            divide=[div_graph[i][n//3:(2*n)//3] for i in range((2*n)//3,n)]
            paper_num(n//3,divide)
            divide=[div_graph[i][(2*n)//3:] for i in range((2*n)//3,n)]
            paper_num(n//3,divide)
    
    paper_num(n,graph)
    print(minus_one)
    print(zero)
    print(one)

    '코테 준비 > 분할정복' 카테고리의 다른 글

    [백준] 1074. Z (다시 풀기)  (0) 2023.01.15
    분할정복 문제를 푸는 방법  (0) 2023.01.09
    [백준] 1992. 쿼드트리  (0) 2023.01.09
    [백준] 2630. 색종이 만들기  (0) 2023.01.09
Designed by Tistory.