문제
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
알고리즘
- 반복문을 통해 종이를 확인한다.
- 시작점에 종이의 수가 현재 종이의 수와 다르다면 3* 3 범위를 재귀적으로 탐색한다.
- 탐색할 때 3으로 나눈 범위를 그 종이의 수 x, y 좌표를 탐색한다.
- 탐색이 모두 끝난 구역은 카운트한다.
코드
import sys
def dfs(x, y, z):
global answer
visited = graph[x][y]
# 반복문을 통해 종이를 확인
for i in range(x, x + z):
for j in range(y, y + z):
# 시작점에 종이의 수가 현재 종이의 수와 다르다면
if graph[i][j] != visited:
# 3 * 3 범위를 재귀적으로 탐색
for k in range(3):
for l in range(3):
dfs(x + k * z // 3, y + l * z // 3, z // 3)
return
# 카운트
if visited == -1:
answer[0] += 1
elif visited == 0:
answer[1] += 1
else:
answer[2] += 1
n = int(sys.stdin.readline())
graph = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
answer = [0, 0, 0]
dfs(0, 0, n)
[print(res) for res in answer]
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 14247번(파이썬): 나무 자르기 (0) | 2022.04.10 |
---|---|
[baekjoon] 백준 2615번(파이썬): 오목 (0) | 2022.04.10 |
[baekjoon] 백준 1986번(파이썬): 체스 (0) | 2022.03.30 |
[baekjoon] 백준 1890번(파이썬): 점프 (0) | 2022.03.29 |
[baekjoon] 백준 1713번(파이썬): 후보 추천하기 (0) | 2022.03.28 |