Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 자바스크립트
- nvm
- 파이어베이스로그인
- Spread
- yarn-berry
- leetcode977
- firebaseui
- 커스텀알림
- React
- Python
- 다리놓기
- Next.js
- 기초
- 타입스크립트
- Rest
- mac
- 프로토타입
- 구조분해할당
- react-native
- youtube iframe
- 리액트
- react-firebaseui
- 커스텀알락
- iP
- 백준
- 파이썬
- css
- nvmrc
- JS
- leetcode189
Archives
- Today
- Total
JadeCode
[백준] python 2630 색종이 만들기 본문
https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
분할정복이란 간단히 말해서 큰것에서 작은것을 탐색하고 최소단위에 도달하면 순차적으로 모든 값을 리턴하는 것이다.
이 색종이 문제는 분할 정복의 기본이라 할 수 있다.
입력받은 n을 2로 계속 나누어 네 개의 부분으로 나눌 수 있다.
그 n을 2로 나눈 것을 4번 재귀호출 하고 반복문을 돌려 나눠진 범위 내의 숫자가 모두 같다면 judge = True로 다르다면 False로 판단하여 False이면 최소 단위가 되거나 그 범위의 숫자가 같을 때 까지 재귀를 하고 True이면 알맞은 색깔을 += 1 하면 된다.
개념만 이해하면 코드 구현은 간단하다
import sys
input = sys.stdin.readline
n = int(input())
arr = [list(map(int,input().split()))for _ in range(n)]
white = 0
blue = 0
def recursive(num,col,row):
global white
global blue
thisTile = arr[col][row]
if num == 1:
if thisTile == 0:
white += 1
else:
blue += 1
return
judge = True
for i in range(num):
for j in range(num):
if arr[col+i][row+j] != thisTile:
judge = False
if judge:
if thisTile == 0:
white += 1
else:
blue += 1
else:
num = num // 2
recursive(num,col,row)
recursive(num,col+num,row)
recursive(num,col,row+num)
recursive(num,col+num,row+num)
recursive(n, 0, 0)
print(white)
print(blue)
'개발 > 알고리즘' 카테고리의 다른 글
[자바스크립트] 2진수, 8진수, 16진수 변환 (1) | 2023.02.09 |
---|---|
[백준] python 10815 숫자카드 (0) | 2022.04.27 |
[백준] python 1059 좋은 구간 (0) | 2022.02.27 |
[백준] python 8958 OX퀴즈 (0) | 2022.02.25 |
[백준] python 2739 구구단 (0) | 2022.02.25 |
Comments