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을 쿼드트리와 같은 방식으로 압축하고자 합니다.
- 당신이 압축하고자 하는 특정 영역을 S라고 정의합니다.
- 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킵니다.
- 그렇지 않다면, 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 |