Programming/python

백준 2630 : 색종이 만들기 [파이썬]

kevin_01 2023. 2. 1. 23:48
728x90

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

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

1. 코드 설명

 

사각형 안에 숫자가 1로 나오는 정사각형 개수 찾는 문제 같다.

 

2. 예

입력에는 변의 개수 이후에 사각형 내부가 입력되고

출력으로는 하얀색 색종이의 개수, 파란색 색종이의 개수가 각각 한줄에 출력된다.

 

3. 코드

import sys
input = sys.stdin.readline

N = int(input())
paper = [list(map(int, input().split())) for _ in range(N)] 

result = []

def make(x, y, N) :
    color = paper[x][y]
    for i in range(x, x+N) :
        for j in range(y, y+N) :
            if color != paper[i][j] :
                make(x, y, N//2)
                make(x, y+N//2, N//2)
                make(x+N//2, y, N//2)
                make(x+N//2, y+N//2, N//2)
                return
    if color == 0:
        result.append(0)
    else:
        result.append(1)


make(0,0,N)
print(result.count(0))
print(result.count(1))

첫 위치와 같은지 확인하고 다르다면 변을 반절로 각각 나눈 사각형을 조사하는 방식이다

재귀로 아니라면 그 안에 검사 맞다면 하얀 사각형인지, 파란 사각형인지 result에 넣어 0의 개수와 1의 개수를 각각 출력한다.

728x90