Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
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
more
Archives
Today
Total
관리 메뉴

개발 블로그

[Programmers/파이썬] 프로그래머스(Lv.2) 쿼드압축 후 개수 세기 문제풀이 본문

Algorithm

[Programmers/파이썬] 프로그래머스(Lv.2) 쿼드압축 후 개수 세기 문제풀이

토산인 2024. 8. 17. 14:53

문제 설명

https://school.programmers.co.kr/learn/courses/30/lessons/68936

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

사고 흐름

1. 배열을 쪼개면서 압축이 가능한지 확인한다 -> 분할 정복

2. 어떻게 배열을 4등분하지? -> n은 2로 나누고, 좌표를 이용하자 !

 

문제 핵심과 알고리즘

분할 정복 + 압축 가능 여부 확인 + 4등분하기 

def solution(arr):
    answer = [0, 0]
    
    def divide(n, x, y) :
        start = arr[x][y]
        for i in range(n) :
            for j in range(n) :
                if arr[x+i][y+j]!=start :
                    divide(n//2, x, y)
                    divide(n//2, x+n//2, y)
                    divide(n//2, x, y+n//2) 
                    divide(n//2, x+n//2, y+n//2)
                    return 
        answer[start]+=1
        return 
    
    divide(len(arr), 0, 0)
    return answer

 

압축이 가능하면 (start와 다 동일하면) answer 하나 증가

압축이 불가능하면 (start와 다르면) 해당 배열을 4등분해서 다시 압축 여부를 확인한다. 

 

문제 풀면서 헤맸던 부분

딱히 없었다. 

 

총평

예전같았으면 지레 겁먹었을 문제였는데 지금은 바로 풀었다. 핵심은 배열을 4등분하는 것 이였다. 이때 빠르게 좌표를 이용한 등분을 생각해서 빨리 풀 수 있었다.