백준 실버2 2630. 색종이 만들기(python)

김범기·2024년 3월 30일

백준

목록 보기
18/18

색종이 만들기


풀이

처음에 우예 푸노? 하다가 예전에 풀었던 게 있어서 참고를 하면서 풀었다.

우선 입력은 matrix로 받아주고, def count_b_w를 통해서 4개로 쪼개는 과정과 함께 count를 해주는 과정을 거쳤다.

  1. 입력받아주기
  2. 해당 정사각형내의 값이 모두 같은 값인지 확인하는 함수를 만들기
  3. 함수 내에서 값을 확인하고, 다른 값이 있으면 4등분하고, 그 내부에서 확인하도록 하기
  4. 다른 값이 없는 것이 확인 된다면, 해당 정사각형에 맞는 색에 +1 해주기
import sys

def count_b_w(row, col, N):
    global blue_count, white_count

    # 현재 위치의 색을 표기.
    cur_position = matrix[row][col]
    for i in range(row, row + N):
        for j in range(col, col + N):
            # 현재 위치의 색과 같은지 확인.
            if cur_position != matrix[i][j]:
                # 현재 위치의 색과 다르면 4등분 해서 다시 확인필요하니 아래처럼 확인.
                next_n = N // 2
                count_b_w(row, col, next_n)
                count_b_w(row, col + next_n, next_n)
                count_b_w(row + next_n, col, next_n)
                count_b_w(row + next_n, col + next_n, next_n)
                return
    # for 문을 끝마치고 나오면(중간에 return당하면 여기 못옴) 해당 색에 +1해주기
    if cur_position == 0:
        white_count += 1
    else:
        blue_count += 1
    return

# 입력받기
N = int(sys.stdin.readline())
matrix = []
for _ in range(N):
    row = list(map(int, sys.stdin.readline().split()))
    matrix.append(row)

blue_count, white_count = 0, 0

count_b_w(0,0,N)
print(white_count)
print(blue_count)
profile
반드시 결승점을 통과하는 개발자

0개의 댓글