반응형
안녕하세요. 개발 중인 정주입니다.
오늘은 "프로그래머스(Lv.2) - 쿼드압축 후 개수 세기" 문제를 풀었습니다.
Github
문제 링크
풀이
이번 문제는 재귀를 이용하면 쉽게 해결할 수 있습니다.
전형적인 재귀 문제라고 봐도 좋습니다.
첫 번째 원소를 확인하고 2차원 배열의 정해진 구간을 탐색하며 다른 원소가 있는지 확인합니다.
만약 다른 원소가 있다면 4분할 하여 재귀 호출합니다.
다른 원소가 없다면 0 혹은 1 카운트를 증가 시킵니다.
감사합니다!
전체 코드
import Foundation
var count: [Int] = [0, 0]
func quardZip(_ arr: [[Int]], x: Int, y: Int, w: Int) {
let firstItem = arr[x][y]
for i in x..<x+w {
for j in y..<y+w {
if arr[i][j] != firstItem {
let halfSize = w / 2
quardZip(arr, x: x, y: y, w: halfSize)
quardZip(arr, x: x+halfSize, y: y, w: halfSize)
quardZip(arr, x: x, y: y+halfSize, w: halfSize)
quardZip(arr, x: x+halfSize, y: y+halfSize, w: halfSize)
return
}
}
}
count[firstItem] += 1
}
func solution(_ arr:[[Int]]) -> [Int] {
quardZip(arr, x: 0, y: 0, w: arr.count)
return count
}
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.
반응형