[백준 알고리즘] 2630번: 색종이 만들기 (Python / 파이썬)

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


문제 접근

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

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

 

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

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

 

정답 코드
#2630: 색종이 만들기

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 // 2
        for i in range(2):
            row_start = i*new_size
            row_end = row_start + new_size
            for j in range(2):
                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]

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

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

 

저작자표시 (새창열림)

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

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

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
gyujh
[백준 알고리즘] 2630번: 색종이 만들기 (Python / 파이썬)
상단으로

티스토리툴바