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

아주 깔끔한 문제인 거 같다.
문제를 읽고 직관적으로 바로 이해되는 문제가 나는 가장 좋은 문제라고 생각한다.
이 문제는 저번에 포스팅했었던 1074번 Z 문제와 흡사하다.
https://mail-study.tistory.com/12
[백준] 1074번 : Z (python 파이썬)
https://www.acmicpc.net/problem/1074 1074번: Z 한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문
mail-study.tistory.com
문제를 보면 직관적으로 알 수 있을 것이다.
일단 색종이를 확인해서 모든 부분이 1 또는 0인지 확인한다.
만약 1과 0이 모두 있다면
4등분한다
그리고 각각의 부분에서 다시 반복한다.
이런 단순한 작업의 반복이기 때문에 구현이 간단할 것이다.
import sys
def l_sum(l): #리스트의 합 구하는 함수
ans = 0
for i in l:
for j in i:
ans = ans + j
return ans
def list_chunk(lst, n): #리스트를 쪼개 2차로 만드는 기능
return [lst[i:i+n] for i in range(0, len(lst), n)]
def func(l,n):
global blue
global white
if l_sum(l) == n**2:
blue = blue+1
elif l_sum(l) == 0:
white = white+1
else:
first_l = []
second_l = []
third_l = []
forth_l = []
for i in range(n):
for j in range(n):
if i < n//2 and j < n//2: # 1사분면
first_l.append(l[i][j])
elif i < n//2 and j >= n//2: #2사분면
second_l.append(l[i][j])
elif i >= n//2 and j < n//2: #3사분면
third_l.append(l[i][j])
elif i >= n//2 and j >= n//2:#4사분면
forth_l.append(l[i][j])
#일차리스트를 n//2 줄로 나누어야 하기에 함수를 사용한다.
func(list_chunk(first_l , n//2) , n//2)
func(list_chunk(second_l , n//2) , n//2)
func(list_chunk(third_l, n//2) , n//2)
func(list_chunk(forth_l , n//2) , n//2)
n = int(sys.stdin.readline())
blue =0
white = 0
l = []
for i in range(n):
l2 = list(map(int, sys.stdin.readline().split(" ")))
l.append(l2)
func(l,n)
print(white)
print(blue)
약간의 팁이라면
이 문제를 풀기 위해 필요한 기능은 다음과 같다.
1. 색종이의 합을 구하는 기능
2. 색종이를 4등분 하는 기능
이 두 부분을 잘 구현해야한다.
하지만 나도 그렇듯이 실력이 좋지 않아 구현에 문제가 어려우면
함수화해서 테스트와 보기에 깔끔하게 정리하는 장점을 챙겨보자!
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[백준] 21736번 : 헌내기는 친구가 필요해 [BFS 설명 有] (1) | 2024.04.20 |
---|---|
[백준] 14940번 : 쉬운 최단거리 (python 파이썬) (0) | 2024.04.20 |
[백준] 15652번 : N과 M(4) (python 파이썬) (0) | 2024.04.18 |
[백준] 1002번 : 터렛 (python 파이썬) (0) | 2024.04.18 |
[백준] 1932번 : 정수 삼각형 (python 파이썬) (0) | 2023.01.24 |