해답)
import sys
sys.setrecursionlimit(10**8)
def input():
return sys.stdin.readline().rstrip()
N = int(input())
board = []
result = [0, 0, 0]
for _ in range(N):
board.append(list(map(int, input().split())))
# 종이가 조건에 맞는지
def isEnd(board, s_r, s_c, length):
v = board[s_r][s_c]
for i in range(s_r, s_r + length):
for j in range(s_c, s_c + length):
if board[i][j] != v:
return False
return True
# 분할
def divide(s_r, s_c, length):
v = board[s_r][s_c]
if isEnd(board, s_r, s_c, length):
result[v] += 1
return
d = length // 3
for i in range(s_r, s_r + length, d):
for j in range(s_c, s_c + length, d):
divide(i, j, d)
divide(0, 0, N)
print(result[-1])
print(result[0])
print(result[1])
풀이)
N 의 범위가 그렇게 크지 않으므로 구현만 잘 하면 시간초과 날 일은 없다!
종이가 하나로 체워졌는지 확인하는 함수(isEnd)와
종이를 분할해가는 함수(divide)로 나누었다.
종이가 하나로 체워졌다면 result 리스트의 값을 갱신해준다.
참고로 result[-1] 은 여기서는 result[2] 와 같다.
* 위 문제의 저작권은 백준(https://www.acmicpc.net/) 에 있습니다.
728x90
'문제풀이 > 백준' 카테고리의 다른 글
[백준✨] 9205번 <맥주 마시며 걸어가기> / Python 문제풀이 / (0) | 2020.11.03 |
---|---|
[백준✨] 1992번 <쿼드트리> / Python 문제풀이 / (0) | 2020.10.27 |
[백준✨] 10825번 <국영수> / Python 문제풀이 (0) | 2020.09.22 |
[백준✨] 1106번 <제곱ㄴㄴ수> / Python 문제풀이 (0) | 2020.09.15 |
[백준✨] 3344번 < N-Queen > / Python 문제풀이 / (0) | 2020.08.07 |
댓글