RIEN😚
이상한 나라의 개발자
RIEN😚
전체 방문자
오늘
어제
  • 분류 전체보기 (125)
    • Algorithm (68)
      • 알고리즘 (0)
      • Baekjoon (8)
      • 프로그래머스 (55)
      • HackerRank (5)
    • Android (30)
      • Project (1)
      • Error (2)
      • Studio (1)
      • Android (26)
    • Kotlin (6)
    • CS (4)
      • 네트워크 (2)
      • 데이터베이스 (2)
    • Front End (5)
      • React (1)
      • VUE (3)
      • Project (0)
      • 기타 (1)
    • 기록 (11)
      • 회고록 (6)
      • TIL (5)

블로그 메뉴

  • Github🔥
  • 포트폴리오🌹

공지사항

인기 글

티스토리

250x250
반응형
hELLO · Designed By 정상우.
RIEN😚

이상한 나라의 개발자

Algorithm/프로그래머스

[프로그래머스] Lv 2. 쿼드 압축 후 개수 세기(kotlin)

2022. 5. 26. 19:27
728x90
반응형
 

코딩테스트 연습 - 쿼드압축 후 개수 세기

[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]

programmers.co.kr

 

문제

0과 1로 이루어진 2^n x 2^n 크기의 2차원 정소 배열 arr이었습니다.

당신은 이 arr을 쿼드트리와 같은 방식으로 압축하고자 합니다.

  1. 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다.
  2. 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다.
  3. 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역으로 쪼갠뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도합니다.

arr이 매개변수로 주어집니다.

위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아 return하도록 solution 함수를 완성해주세요.

 

흠. 뭔가 백준의 쿼드트리 문제와 같아보입니다.🤨

*참조
 

[Baekjoon] 1992. 쿼드트리(python)

1992번: 쿼드트리 첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다.

rien-atelier.tistory.com

 

코드

class Solution {
    
    val result = intArrayOf(0,0)
    
    fun solution(arr: Array<IntArray>): IntArray {
        solve(0,0,arr.size,arr)
        return result
    }
    
    fun solve(x: Int,y: Int,size: Int,arr: Array<IntArray>) {
        val state = arr[x][y]
        var isSame = true
        
        for (i in x until x+size) {
            for (j in y until y+size) {
                if (arr[i][j] != state) {
                    isSame = false
                    break
                }
            }
            if (isSame.not()) break
        }
        
        if (isSame) { // 다 같은 수
            result[state]++
            return
        }
        
        val nSize = size / 2
        solve(x,y,nSize,arr) // 왼쪽 위
        solve(x,y+nSize,nSize,arr) // 오른쪽 위
        solve(x+nSize,y,nSize,arr) // 왼쪽 아래
        solve(x+nSize,y+nSize,nSize,arr) // 오른쪽 아래
    }
}
반응형

'Algorithm > 프로그래머스' 카테고리의 다른 글

[프로그래머스] Lv 2. 숫자블록(Python)  (0) 2022.06.02
[프로그래머스] Lv 2. 3 x n 타일링(Python)  (0) 2022.06.02
[프로그래머스] Lv 2. n^2 배열 자르기(Kotlin)  (0) 2022.05.26
[프로그래머스] Lv 2. 모음사전  (0) 2022.05.25
[프로그래머스] Lv 2. 전력망을 둘로 나누기  (0) 2022.05.25
    'Algorithm/프로그래머스' 카테고리의 다른 글
    • [프로그래머스] Lv 2. 숫자블록(Python)
    • [프로그래머스] Lv 2. 3 x n 타일링(Python)
    • [프로그래머스] Lv 2. n^2 배열 자르기(Kotlin)
    • [프로그래머스] Lv 2. 모음사전
    RIEN😚
    RIEN😚
    안드로이드 / 코틀린 독학으로 취업하자!

    티스토리툴바