파이썬 백준 1992번
실버1
https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
문제 보기

분류: 분할 정복, 재귀
문제 풀기
이전에 풀었던 2630번 색종이 만들기 문제와 거의 동일하다.
[Python] 백준 풀기 2630 - 색종이 만들기
파이썬 백준 2630번 실버2 https://www.acmicpc.net/problem/2630 2630번: 색종이 만들기 첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄..
xcevor.tistory.com
출력되는 형식만 잘 지켜주면 되는데 재귀 함수를 들어갈때 "(" 와 나올때 ")" 가 프린트 되도록 해주고, 압축된 결과에 대해 0 또는 1 이 프린트 되도록 한다.
거의 비슷한 문제를 한번 더 풀었지만 왠지 이런 문제를 접근하는 방식에 대해 조금 훈련이 된듯하다.
코드 보기
import sys
inputdata = sys.stdin.readline
def fnCompressor(x, y, N):
wb_check = wbscreen_ls[x][y]
for i in range(x, x + N):
for j in range(y, y + N):
if wb_check != wbscreen_ls[i][j]:
print("(", end='')
fnCompressor(x, y, N//2)
fnCompressor(x, y + N//2, N//2)
fnCompressor(x + N//2, y, N//2)
fnCompressor(x + N//2, y + N//2, N//2)
print(")", end='')
return
if wb_check == 0:
print(0, end='')
if wb_check == 1:
print(1, end='')
if __name__ == "__main__":
N = int(inputdata().strip())
wbscreen_ls = [list(map(int, inputdata().strip())) for _ in range(N)]
# print(wbscreen_ls)
fnCompressor(0, 0, N)
# 8
# 11110000
# 11110000
# 00011100
# 00011100
# 11110000
# 11110000
# 11110011
# 11110011
# ((110(0101))(0010)1(0001))
'공부하기 > 백준' 카테고리의 다른 글
| [Python] 백준 풀기 1780 - 종이의 개수 (0) | 2022.10.12 |
|---|---|
| [Python] 백준 풀기 1920 - 수 찾기 (0) | 2022.10.11 |
| [Python] 백준 풀기 2630 - 색종이 만들기 (0) | 2022.10.10 |
| [Python] 백준 풀기 1541 - 잃어버린 괄호 (0) | 2022.10.09 |
| [Python] 백준 풀기 1931 - 회의실 배정 (0) | 2022.10.07 |