티스토리 뷰

코드카타

 

기능개발

 

문제

 

해당 문제는 스택/큐의 개념을 활용해서 풀라고 되어있는데

굳이 스택이랑 큐 안써도 풀리는 문제이다.

 

 

입출력 예시

 

각 프로세스마다 배포 일수를 구하고 현재 가장 오래 걸리는 배포 일수가

현재 배포 일수보다 클 때와 작을 때의 경우를 구분해서 처리하면 된다.

 

해당 로직은 가변형 리스트와 맵 컬렉션을 활용하여 구현할 수 있다.

 

 

해당 문제에서 맵이 가지는 특징

첫번째 테스트 케이스: [7, 9, 3] => {7=1, 9=2}
두번째 테스트 케이스: [5, 10, 1, 1, 20, 1] => {5=1, 10=3, 20=2}

어떤 기능이 완성되더라도 앞에 있는 모든 기능이 완성되지 않는다면

배포가 불가하기에 맵의 키값은 오름차순 형태로 정렬되어있다.

 

 

풀이

class Solution {
    fun solution(progresses: IntArray, speeds: IntArray): List<Int> {
    	// 각 기능의 배포까지 걸리는 일수를 구한다
        val arr = mutableListOf<Int>()
        for (i in progresses.indices) {
            var cnt = 0
            var d = progresses[i]
            while (d < 100) {
                d += speeds[i]
                cnt++
            }
            arr.add(cnt)
        }
        
        // 각 배포 일수 별로 몇 개의 기능이 함께 배포될지를 구한다
        val map = mutableMapOf<Int, Int>()
        for (i in arr.indices) {
            if (i == 0) { // 맵에 키가 존재하지 않는 경우 고려
                map[arr[i]] = map.getOrDefault(arr[i], 0) + 1
            } else { 
                // 현재 가장 오래 걸리는 배포 일수
                val last = map.keys.last() 
                // 현재 기능의 배포일이 가장 최근에 처리한 배포일보다 큰 경우
                if (arr[i] > last) map[arr[i]] = map.getOrDefault(arr[i], 0) + 1
                // 현재 기능의 배포일이 가장 최근에 처리한 배포일보다 작거나 같은 경우
                else map[last] = map.getOrDefault(last, 0) + 1
            }
        }
        
        // 배포 일수 별로 배포되는 기능의 수를 저장한다
        val res = mutableListOf<Int>()
        for(i in map.values){
            res.add(i)
        }

        return res
    }
}

각 프로세스의 배포 일자를 요소로 가지는 리스트를 만들어준다.

 

해당 리스트를 이용해 배포 일수를 key, 해당 일자에 배포되는 기능의 수를 value로

가지는 해쉬 맵을 생성하고 그 맵의 value를 요소로 가지는 리스트를 만든 뒤 반환하면 된다.

 

 

회고

이번 문제도 문제 설명이 상세하게 잘 되어있어서 로직을

어떤식으로 구현해야할지 감이 잡혀 쉽게 풀었던 것 같다.

 

맵을 계속 쓰다보니 해당 자료형에 대한 이해도가 많이

늘었다는 것을 이번 문제를 풀면서 체감할 수 있었다.

 

배열 다루는 문제에서 맵 자료형은 정말 유용하게 쓰이는 것 같다.

 

아 그리고 항상 느끼는 건데 문제 풀이보다 

문제 풀이 과정을 설명하는게 훨씬 어려운 것 같다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
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
글 보관함