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 | 29 | 30 | 31 |
Tags
- 분할정복
- 빌더패턴
- g1gc
- 그래프 탐색
- 그래프탐색
- 백준
- 적정 스레드
- 브루트포스
- 몬티홀
- 구현
- GarbageCollector
- Python
- Markdown
- 면접복기
- DP
- 프로세스
- 이진탐색
- springboot
- deque
- github
- 정수론
- Greedy
- BFS
- Stack
- 마크다운
- 그리디
- 문제풀이
- 배열 돌리기1
- GC
- 회고
Archives
- Today
- Total
FeelingXD
[백준 -1992] 쿼드트리 본문
❓ Problem
🤔 How
여담으로 이러한 쿼드트리 방식은 실제 비디오 압축, 등 여러 압축기술에 사용된다 !
문제를 보고 딱 분할정복 문제이다 싶었는데 어떻게 구현하는지 살짝 먹먹 했는데 다행이 잘 해결했다. 😅 구현, 분할정복 문제를 익숙하게 할수있도록 연습해야겠다.
수학의 사분면을 이해하고 접목해야한다. 쿼드트리 지문에
0과 1이 섞여 있으면 전체를 한 번에 나타내지를 못하고, 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래, 이렇게 4개의 영상으로 나누어 압축
으로 명시되어 있다.행열을 탐색하며 처음 글자와 비교했을때 다른글자가 있으면 시작점을 기준으로 4분면을 나누고 작은단위로 쪼개면서 다시 압축여부를 판별해야한다.
compression 함수 해당함수는 압축하는 함수임과동시에 재귀적으로 호출하여 분할정복을 실제 실행하는 함수이다. 행열 탐색중 다른 글자를 찾게된다면 4분면을 기준으로 다시 쪼개서 탐색한다.
❗ Solve
# 쿼드트리
import sys
input = sys.stdin.readline
def get_board(rows):
return [input().strip() for _ in range(rows)]
def solution():
l = int(input())
board = get_board(l)
answer = ""
def compression(y, x, l): # 압축
nonlocal answer
start = board[y][x]
for row in range(y, y + l):
for col in range(x, x + l):
if board[row][col] != start:
l //= 2
answer += "("
compression(y, x, l)
compression(y, x + l, l)
compression(y + l, x, l)
compression(y + l, x + l, l)
answer += ")"
return
pass
answer += start
compression(0, 0, l)
print(answer)
pass
if __name__ == "__main__": # 실행되는 부분
solution()
pass
'프로그래밍 > 문제풀이' 카테고리의 다른 글
[프로그래머스-42895 ] N으로 표현 🔑 (0) | 2024.03.09 |
---|---|
[백준-1074] Z ✨ (0) | 2024.02.28 |
[백준-17609] 회문 (0) | 2024.02.20 |
[백준-20006] 랭킹전 대기열 (0) | 2024.02.14 |
[백준-16946] 벽 부수고 이동하기 4 🧱🔨 (0) | 2024.01.30 |