본문 바로가기
Sketch (Programming Language)/Python

Baekjoon Training #1992

by 생각하는 이상훈 2022. 9. 27.
728x90

#1992

#n by n pixel의 video를 압축하는 문제
#pixel수를 결정할 n을 입력받는다.
n=int(input())
#2차원 list를 입력받는다.
video=[list(map(int, input())) for k in range(n)]

#압축기 compressor 함수를 정의한다.
def compressor(x, y, n):    #parameter는 x,y좌표, n이다.
    pixel = video[x][y]     #특정좌표의 값을 pixel값으로 설정
#pixel의 오른쪽과 아래쪽으로 퍼져나가며 조사를 진행한다.
    for i in range(x, x+n):
        for j in range(y, y+n):
#조사한 부분중 pixel과 일치하지 않는 값이 존재하면 pixel을 -1로 설정
            if pixel != video[i][j]:
                pixel = -1
                break

#pixel값이 -1로 나오면 n을 절반으로 줄여서 조사를 다시 진행           
    if pixel == -1:
#이떄 새로운 괄호를 만들어준다.
        print("(", end='')
        n = n // 2
        compressor(x, y, n)
        compressor(x, y + n, n)
        compressor(x + n, y, n)
        compressor(x + n, y + n, n)
        print(")", end='')
#조사 내역이 전부 pixel과 일치하면 pixel값과 같게 압축한다.
    elif pixel == 1:
        print(1, end='')
        
    else:
        print(0, end='')
        
        
compressor(0, 0, n)

최근 진행했던 백준 문제중 가장 어려움이 많았다. 그러나 단순한 원리에 집중하고 코드를 작성하니 원하는 결과값을 낼 수 있었다. n만큼 조사를 진행하고 전부 같지 않으면 조사범위 n을 줄이고 다시 조사를 진행하여 재귀함수 느낌이 나는 코드를 짜보았다.


 

728x90

'Sketch (Programming Language) > Python' 카테고리의 다른 글

Baekjoon Training #1753  (0) 2022.11.01
Baekjoon Training #1012  (0) 2022.10.01
Baekjoon Training #1543  (0) 2022.09.26
Baekjoon Training #1449  (0) 2022.09.26
Baekjoon Training #1436  (0) 2022.09.20