Post

Baekjoon2630 - 색종이 만들기 (Python)

백준 사이트 2630 - 색종이 만들기 문제입니다.

이 글을 보시기 전에 문제를 풀기 위해 충분한 생각을 하셨나요? 답을 안 보고 푸는게 최대한 고민하는게 가장 중요하다고 생각합니다.!!

☑️ 1. 문제

https://www.acmicpc.net/problem/2630


☑️ 2. Input , Output


☑️ 3. 분류 및 난이도

solved.ac class 3 문제입니다.


☑️ 4. 생각한 것들

  • 재귀 문제입니다.
  • 맨 처음에 접근했을때 모든 영역이 ‘0’(white)나 ‘1’(blue)이면 그 영역에 대한 카운트를 세주고 영역검사를 하지 않아야합니다.
  • 맨 처음에는 전체 사이즈에 대한 영역검사를 하고, 만약 영역별 다르다면 짜르기를 시작하여 최대한 쪼개도록합니다.

5. code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
from sys import stdin
from collections import deque

blue = 0
white = 0


def divide(maps, row, col, size):
    def is_full(maps, row, col, size):
        color = maps[row][col]
        for i in range(row, row + size):
            for j in range(col, col + size):
                if color != maps[i][j]:
                    return False
        return True

    if is_full(maps, row, col, size):
        if maps[row][col] == 0:
            # 전역변수 호출
            global white
            white += 1
        else:
            global blue
            blue += 1
        return

    new_size = size // 2
    divide(maps, row, col, new_size)
    divide(maps, row, col + new_size, new_size)
    divide(maps, row + new_size, col, new_size)
    divide(maps, row + new_size, col + new_size, new_size)


def solution():
    n = int(stdin.readline())
    maps = deque()
    for i in range(n):
        maps.append(list(map(int, stdin.readline().split())))
    divide(maps, 0, 0, n)
    # '\n'간격으로 출력.
    print(white, blue, sep='\n')


solution()


6. 후기

c++로 작성이 필요하거나 도움이 필요하시면 댓글을 작성해주세요.!! 기록용이라 설명이 자세하지 않습니다.

This post is licensed under CC BY 4.0 by the author.