[백준 2630 번] 색종이 만들기 | python 풀이

2022. 4. 8. 09:37·Baekjoon/python

 

 📝백준 2630

✂️색종이 만들기

💡 분할 정복, 재귀

 

https://www.acmicpc.net/problem/2630

 


 

 

백준 2630번 채점 결과

 

 

 

🔷 Submission Code

## 백준
## 2630번 : 색종이 만들기
## 분할 정복, 재귀

##* 문제 규칙
## 모두 같은 색으로 칠해져 있지 않으면 중간 부분 자름
## 종료 조건 : 모두 같은색, 하나의 정사각형 될경우
## 하얀색 0, 파란색 1
## 출력 첫째줄 : 하얀색 색종이 개수, 둘째줄 : 파란색 색종이 개수


def makepaper(x, y, N):
    global wCount, bCount
    color = paper[x][y]
    
    for i in range(x, x+N):
        for j in range(y, y+N):
            if color != paper[i][j]:
                makepaper(x, y, N//2)
                makepaper(x, y+N//2, N//2)
                makepaper(x+N//2, y, N//2)
                makepaper(x+N//2, y+N//2, N//2)
                return

    if color == 0:
        wCount +=1
    else:
        bCount +=1

if __name__ == "__main__":
    N = int(input())  # N : 한변의 길이 ( N=2k, k는 1 이상 7 이하의 자연수 )
    paper = [list(map(int, input().split())) for _ in range(N)]
    wCount, bCount = 0, 0

    makepaper(0,0,N)
    print(wCount)
    print(bCount)

 

 

백준 2630번 색종이 만들기는 분할 정복을 적용하여 풀 수 있는 문제이다. 종이의 색이 같지 않을 경우 중간 부분에 자르는 작업을 반복적으로 해주게 된다. 이러한 함수는 재귀 함수를 통해서 동작시킬 수 있다. 종이의 색이 모두 같은 색으로 칠해져 있거나 하나의 정사각형이 될 때까지 작업을 반복해준다. 그리고 마지막에 나누어진 색종이 개수를 출력해주는 문제이다.

 

 

 

 

색종이 쪼개지는 예시 그림

 

 

 


 

 

 

 

 

🔶 main 코드

##* 문제 규칙
## 모두 같은 색으로 칠해져 있지 않으면 중간 부분 자름
## 종료 조건 : 모두 같은색, 하나의 정사각형 될경우
## 하얀색 0, 파란색 1
## 출력 첫째줄 : 하얀색 색종이 개수, 둘째줄 : 파란색 색종이 개수

##* 코드 전체적인 흐름
if __name__ == "__main__":
    N = int(input())  # N : 한변의 길이 ( N=2k, k는 1 이상 7 이하의 자연수 )
    paper = [list(map(int, input().split())) for _ in range(N)]
    wCount, bCount = 0, 0

    makepaper(0,0,N)
    print(wCount)
    print(bCount)

첫번째 입력값으로 한 변의 길이를 입력받아서 N 변수에 저장해준다. 그리고 N 만큼 for문과 list comprehension으로 종이의 색 값인 0과 1 값을 paper 변수에 저장한다. 흰색 종이와 파란색 색종이 개수를 0으로 초기화를 해주고 색종이 반으로 나누면서 종이를 만들어 주는 함수인 makepaper를 거친 후 색종이 개수를 출력해준다.

 

 

 

 


 

 

 

 

🔶 makepaper 함수

def makepaper(x, y, N):
    global wCount, bCount
    color = paper[x][y]
    
    for i in range(x, x+N):
        for j in range(y, y+N):
            if color != paper[i][j]:
                makepaper(x, y, N//2)
                makepaper(x, y+N//2, N//2)
                makepaper(x+N//2, y, N//2)
                makepaper(x+N//2, y+N//2, N//2)
                return

    if color == 0:
        wCount +=1
    else:
        bCount +=1

처음에 x,y 매개변수로 0이 들어온다. 먼저 color 변수에 종이 가장자리 부분 색깔을 넣어준다. 이중 for문을 돌면서 i과 j로 paper의 행, 열 인덱스를 접근하면서 해당 인덱스의 좌표 색깔이 아까 저장해놓은 가장자리 색과 같은지 비교하고 다를 경우 종이 가로 세로 쪼개기를 해준다. 종이를 4등분으로 쪼개는 거는 재귀 함수를 통해서 동작이 되며 재귀 함수의 종료 조건이 될 때까지 반복하게 된다. makepaper 마지막에는 조건문을 통해서 종이 색깔 global 변수를 증가시켜준다.

 

 

 

 

 

 

 

 

 

 

소스 코드 링크 : 

https://github.com/KwanHoo/Data-Structure__Algorithm/blob/main/Python/baekjoon/silver/Baek_2630.py

 

GitHub - KwanHoo/Data-Structure__Algorithm: Data structures and algorithms practice code, Backjoon submission code

Data structures and algorithms practice code, Backjoon submission code - GitHub - KwanHoo/Data-Structure__Algorithm: Data structures and algorithms practice code, Backjoon submission code

github.com

 

 

저작자표시 비영리 변경금지 (새창열림)

'Baekjoon > python' 카테고리의 다른 글

[백준 2750번] 수 정렬하기 | beakjoon python 풀이  (0) 2022.04.11
[백준 2263번] 트리의 순회 | python 풀이  (0) 2022.04.11
[백준 4256번] 트리 | python 풀이  (0) 2022.04.08
[백준 4881 번] 자리수의 제곱 | python 풀이  (0) 2022.04.06
[백준 14503 번] 로봇청소기 | python 풀이  (0) 2022.04.06
'Baekjoon/python' 카테고리의 다른 글
  • [백준 2263번] 트리의 순회 | python 풀이
  • [백준 4256번] 트리 | python 풀이
  • [백준 4881 번] 자리수의 제곱 | python 풀이
  • [백준 14503 번] 로봇청소기 | python 풀이
모리아모리
모리아모리
👋 寬澔 🌲 linktr.ee/hokwan7
  • 모리아모리
    모리모리블로그로그
    모리아모리
  • 전체
    오늘
    어제
    • 분류 전체보기 (50)
      • Baekjoon (13)
        • python (13)
      • 프로그래머스 (0)
      • WEB 공부 (16)
        • HTML, CSS (0)
        • WEB, 브라우저 상식 (2)
        • Poiemaweb_공부요약 (1)
        • JavaScript (9)
        • React (4)
      • 알고리즘, 자료구조 (1)
        • 이코테_Python (1)
      • 데이터분석 (3)
      • 인공지능 (5)
      • 프로그래밍언어 (2)
        • JAVA (2)
      • 데이터베이스 (2)
        • DB (1)
        • Oracle (1)
      • 개발도구 (7)
        • ECLIPSE (1)
        • Power Automate (6)
      • AWS (1)
        • AWS(Amazon web Service) 입문자.. (1)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    구현
    리액트 그래프
    Python
    데이터 엑셀 추출
    javascript
    RPA
    Power Automate
    Daum 크롤링
    강의 메모
    분할정복
    웹툰 평점 데이터 추출
    자바스크립트
    Excle
    조건문
    최저가데이터추출
    생활코딩
    재귀
    onnx
    사칙연산
    유튜브 크롤링
    바닐라 JS로 크롬 앱 만들기
    크롤링
    React Chart
    Recharts.js
    유튜브 데이터 추출
    강의메모
    제품가격추출
    수학
    Excel
    SQL
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
모리아모리
[백준 2630 번] 색종이 만들기 | python 풀이
상단으로

티스토리툴바