728x90
반응형
https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
import sys
n = int(sys.stdin.readline().strip())
arr = []
for i in range(n): #2차원 배열 형태로 처음 색종이 입력 받음
arr.append(sys.stdin.readline().strip().split())
ans = []
b = [0]
w = [0]
def cut(arr):
#색종이의 길이가 1보다 크면서 0,1 둘다 색종이 안에 있어야만 실행. 실행조건
if len(arr[0]) > 1 and '0' in sum(arr,[]) and '1' in sum(arr,[]):
a = len(arr[0]) // 2
temp = [[],[],[],[]] # 다시 4등분할 색종이 생성
for i in range(a):#열 a개를 넣기위해 반복문과 슬라이싱 사용
temp[0].append(arr[i][:a])
temp[1].append(arr[i][a:])
temp[2].append(arr[i + a][:a])
temp[3].append(arr[i + a][a:])
for i in range(4):
#4등분한 색종이 색상판별을 위해 재귀 호출
cut(temp[i])
#0,1 둘중 하나만 색종이에 존재하면 종료. 종료조건
else:
if arr[0][0] == '1':
b[0] = b[0] + 1
else:
w[0] = w[0] + 1
cut(arr)
print(w[0])
print(b[0])
입력받은 색종이의 길이의 절반이 되도록 4등분으로 종이를 나눈다.
해당 종이 안에 0과 1이 같이 존재하면 다시 재귀를 호출해서 나눈다.
그렇지 않을경우 색상에 맞게 종이의 개수를 count 해준다.
728x90
반응형
'Algorithm & Data Structure' 카테고리의 다른 글
백준 - 18352번(다익스트라, BFS) (0) | 2022.05.21 |
---|---|
백준 - 2448번(재귀) (0) | 2022.04.28 |
백준 - 11729번(재귀) (0) | 2022.04.28 |
백준 - 16236번(BFS,구현) (0) | 2022.04.10 |
백준 - 7576번(BFS) (0) | 2022.04.09 |