백준 1780 종이의 개수

김민영·2023년 1월 6일
0

알고리즘

목록 보기
36/125

과정

  • 정사각형의 0, 1, -1 개수 세어보고 하나만 0이 아닌 경우면 종이에 모두 같은 수라고 생각
  • 하나만 0이 아닌 경우가 아니면 수가 섞여있음. 9등분해서 0, 1, -1 개수 세어봄
N = int(input())
map_lst = [list(map(int, input().split())) for _ in range(N)]
ans_1 = 0
ans_0 = 0
ans_2 = 0

def square(x, y, N):
    global ans_1, ans_0, ans_2
    # N == 1이면, 0, 1, -1, 개수 반환
    num_1 = 0
    num_0 = 0
    num_2 = 0
    for i in range(N):
        for j in range(N):
            if map_lst[y+i][x+j] == 0:
                num_0 += 1
            elif map_lst[y+i][x+j] == 1:
                num_1 += 1
            elif map_lst[y+i][x+j] == -1:
                num_2 += 1
    num_lst = [num_1, num_0, num_2]
    sub = 0
    for i in num_lst:
        if i == 0:
            sub += 1

    if sub != 2:
        N = N // 3
        for i in range(3):
            for j in range(3):
                square(x+j*N, y+i*N, N)
    else:
        if num_lst[0] != 0:
            ans_1 += 1
        elif num_lst[1] != 0:
            ans_0 += 1
        elif num_lst[2] != 0:
            ans_2 += 1
square(0, 0, N)
print(ans_2)
print(ans_0)
print(ans_1)
  • Python 3으로는 시간초과가 발생하고, PyPy3으로는 통과되지만, 메모리가 많이 필요하다. ( 좋은 코드가 아니다 )
  • 한 종이에 숫자가 섞인걸 알게된 순간 반복문 중단하고 종이 9등분하도록 하면 수행 시간을 단축할 수 있을 것 같다.
profile
노션에 1차 정리합니당 - https://cream-efraasia-f3c.notion.site/4fb02c0dc82e48358e67c61b7ce8ab36?v=

0개의 댓글