반응형
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
풀이
- 3의 제곱수로 이루어진 정사각형의 종이를 한 정사각형안에 같은 숫자로만 이루어지도록 하고 그렇지 않으면 9등분을 반복하는 문제이다.
- 따라서 더 잘라야할 상황이 나오면 더 자르도록 분할해서 해결하면 된다.
- 재귀함수를 통해서 문제 분할을 구현하였다.
import sys
stack = []
n = int(sys.stdin.readline())
for _ in range(n):
stack.append(list(map(int, input().split())))
def check(start_x,start_y,n):
global stack
hold_check = 0
hold = stack[start_y][start_x]
for i in range(start_y,start_y+n):
for t in range(start_x,start_x+n):
if hold != stack[i][t]:
hold_check = 1
break
if hold_check == 1:
new_n = int(n/3)
ans_1 = 0
ans_2 = 0
ans_3 = 0
for i in range(start_y,start_y+n,new_n):
for t in range(start_x,start_x+n,new_n):
ans1 , ans2 , ans3 = check(t,i,new_n)
ans_1 += ans1
ans_2 += ans2
ans_3 += ans3
return (ans_1,ans_2,ans_3)
elif hold_check == 0:
if hold == -1:
return (1,0,0)
elif hold == 0:
return (0,1,0)
elif hold == 1:
return (0,0,1)
ans1 , ans2, ans3 = check(0,0,n)
print(ans1)
print(ans2)
print(ans3)
반응형
'코딩 > 백준' 카테고리의 다른 글
알고리즘 - Python / 백준 - 2023번 : 신기한 소수 (0) | 2021.09.07 |
---|---|
알고리즘 - Python / 백준 - 1074번 : Z (0) | 2021.09.06 |
알고리즘 - Python / 백준 - 2116번 : 주사위 쌓기 (0) | 2021.09.04 |
알고리즘 - Python / 백준 - 1389번 : 케빈 베이컨의 6단계 법칙 (0) | 2021.08.31 |
알고리즘 - Python / 백준 - 18870번 : 좌표 압축 (0) | 2021.08.29 |