프로그래머스

[프로그래머스][Kotlin] 2020 카카오 인턴십 보석 쇼핑

끝까지 처음처럼 2023. 4. 2. 22:15
728x90

해당 문제는 이분탐색과 HashMap를 이용하면 쉽게 풀 수 있는 문제였습니다.

 

 

 

하기는 제가 작성한 코드와 실행 결과 입니다.

class Solution {
    fun solution(gems: Array<String>): IntArray {
        var answer = intArrayOf()
        var map = HashMap<String,Int>()
        gems.forEach {
            map.put(it,0)
        }
        val max = map.size
        map = HashMap<String,Int>()

        var left = 0
        var right = 0
        var min = gems.size

        while(right < gems.size){
            if(map.containsKey(gems[right])){
                map[gems[right]] = map[gems[right]]!! + 1
            } else {
                map[gems[right]] = 1
            }
            right++

            while(map.size == max){
                map[gems[left]] = map[gems[left]]!!-1
                if(map[gems[left]] == 0){
                    map.remove(gems[left])
                }
                left++
                if(right-left < min){
                    min = right - left
                    answer = intArrayOf(left,right)
                }
            }
        }

        return answer
    }
}

 

정확성 테스트
테스트 1 통과 (0.10ms, 61.9MB)
테스트 2 통과 (1.48ms, 59.4MB)
테스트 3 통과 (0.49ms, 60.3MB)
테스트 4 통과 (0.42ms, 61.4MB)
테스트 5 통과 (1.00ms, 61MB)
테스트 6 통과 (0.06ms, 61.7MB)
테스트 7 통과 (0.11ms, 61.5MB)
테스트 8 통과 (1.18ms, 60.4MB)
테스트 9 통과 (1.63ms, 61.7MB)
테스트 10 통과 (0.74ms, 61.9MB)
테스트 11 통과 (1.61ms, 60.3MB)
테스트 12 통과 (1.54ms, 61.8MB)
테스트 13 통과 (1.87ms, 62.8MB)
테스트 14 통과 (1.63ms, 61.8MB)
테스트 15 통과 (3.25ms, 64.4MB)
효율성 테스트
테스트 1 통과 (7.78ms, 59.1MB)
테스트 2 통과 (21.05ms, 61.5MB)
테스트 3 통과 (17.62ms, 62.6MB)
테스트 4 통과 (17.31ms, 66.9MB)
테스트 5 통과 (35.98ms, 68.1MB)
테스트 6 통과 (37.73ms, 69.1MB)
테스트 7 통과 (46.58ms, 70.3MB)
테스트 8 통과 (36.56ms, 72.3MB)
테스트 9 통과 (44.94ms, 78.9MB)
테스트 10 통과 (44.37ms, 80.5MB)
테스트 11 통과 (50.16ms, 81.6MB)
테스트 12 통과 (90.55ms, 85.5MB)
테스트 13 통과 (49.01ms, 84.9MB)
테스트 14 통과 (57.97ms, 84.3MB)
테스트 15 통과 (62.94ms, 84.5MB)