[백준 알고리즘] 1780번: 종이의 개수 (Python / 파이썬)

2024. 1. 22. 00:28·알고리즘/백준


문제 접근

n x n 행렬을 받아, 안의 모든 요소가 같다면 그대로 리턴, 같지 않다면 행과 열을 절반으로 나누어 9개의 행렬로 분할하여 각각 재귀호출한다.

재귀함수를 하나 만들었고, 각 영역이 몇 개씩인지 세야 하므로 count[]라는 배열을 만들어 영역이 1로 채워진 경우 count[1]에, 영역이 0으로 채워진 경우 count[0]에, -1로 채워진 경우 count[-1]에 더해지도록 했다.

 

가장 중요한 부분은 행렬을 9개로 분할하는 것인데, 파이썬의 slicing을 사용했다.

현재 행(열) 사이즈를 1/3로 나누어 new_size에 할당하고 이를 이용해 3*3 for loop를 돌며 새로 만들(분할된) 행렬의 범위를 슬라이싱으로 정해주었다.

 

정답 풀이
#1780번: 종이의 개수

import sys

def count_picture(matrix, count):
    size = len(matrix)
    flag = 0
    first = matrix[0][0]
    for i in range(size):
        for j in range(size):
            if matrix[i][j] != first:
                flag = 1
                break
    if flag == 1:
        new_size = size // 3
        for i in range(3):
            row_start = i*new_size
            row_end = row_start + new_size
            for j in range(3):
                column_start = j*new_size
                column_end = column_start + new_size
                new_matrix = [row[column_start:column_end] for row in matrix[row_start:row_end]]
                count_picture(new_matrix, count)
    else:
        count[matrix[0][0]] += 1
        return

n = int(sys.stdin.readline().rstrip())
matrix = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]
count = [0, 0, 0]

count_picture(matrix, count)
print(count[-1])
print(count[0])
print(count[1])

 

1780번: 종이의 개수

N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수

www.acmicpc.net

 

저작자표시

'알고리즘 > 백준' 카테고리의 다른 글

[백준 알고리즘] 2206번: 벽 부수고 이동하기 (Python / 파이썬)  (4) 2024.01.22
[백준 알고리즘] 10026번: 적록색약 (Python / 파이썬)  (2) 2024.01.22
[백준 알고리즘] 2630번: 색종이 만들기 (Python / 파이썬)  (0) 2024.01.22
[백준 알고리즘] 1012번: 유기농 배추 (Python / 파이썬)  (2) 2024.01.19
[백준 알고리즘] 7576번: 토마토 (Python / 파이썬)  (0) 2024.01.19
'알고리즘/백준' 카테고리의 다른 글
  • [백준 알고리즘] 2206번: 벽 부수고 이동하기 (Python / 파이썬)
  • [백준 알고리즘] 10026번: 적록색약 (Python / 파이썬)
  • [백준 알고리즘] 2630번: 색종이 만들기 (Python / 파이썬)
  • [백준 알고리즘] 1012번: 유기농 배추 (Python / 파이썬)
gyujh
gyujh
개발 공부 블로그
  • gyujh
    규
    gyujh
  • 전체
    오늘
    어제
    • 분류 전체보기 (86)
      • Backend&DB (3)
      • CS (5)
        • 컴퓨터구조 (1)
        • 소프트웨어공학 (4)
      • JavaScript (2)
      • Git (2)
      • 알고리즘 (73)
        • 개념 (3)
        • 백준 (70)
      • Projects (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    시간초과
    스택
    너비우선탐색
    정렬
    구현
    숏코딩
    algorithm
    런타임
    프로그래머스
    알고리즘
    BOJ
    에러
    문자열
    정답
    재귀
    딕셔너리
    답안
    답
    백준
    풀이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
gyujh
[백준 알고리즘] 1780번: 종이의 개수 (Python / 파이썬)
상단으로

티스토리툴바