티스토리 뷰
코드카타
기능개발
문제
해당 문제는 스택/큐의 개념을 활용해서 풀라고 되어있는데
굳이 스택이랑 큐 안써도 풀리는 문제이다.
입출력 예시
각 프로세스마다 배포 일수를 구하고 현재 가장 오래 걸리는 배포 일수가
현재 배포 일수보다 클 때와 작을 때의 경우를 구분해서 처리하면 된다.
해당 로직은 가변형 리스트와 맵 컬렉션을 활용하여 구현할 수 있다.
해당 문제에서 맵이 가지는 특징
첫번째 테스트 케이스: [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를 요소로 가지는 리스트를 만든 뒤 반환하면 된다.
회고
이번 문제도 문제 설명이 상세하게 잘 되어있어서 로직을
어떤식으로 구현해야할지 감이 잡혀 쉽게 풀었던 것 같다.
맵을 계속 쓰다보니 해당 자료형에 대한 이해도가 많이
늘었다는 것을 이번 문제를 풀면서 체감할 수 있었다.
배열 다루는 문제에서 맵 자료형은 정말 유용하게 쓰이는 것 같다.
아 그리고 항상 느끼는 건데 문제 풀이보다
문제 풀이 과정을 설명하는게 훨씬 어려운 것 같다.
'내일배움캠프 > Android 국비지원' 카테고리의 다른 글
TIL 30일차 (피로도 - Kotlin | 액티비티 생명주기 개념 정리) (0) | 2024.06.25 |
---|---|
TIL 29일차 (프로세스 - Kotlin | Queue 알아보기 | 액티비티와 인텐트 알아보기) (0) | 2024.06.24 |
TIL 27일차 (의상 - Kotlin) (1) | 2024.06.22 |
TIL 26일차 (할인 행사 - Kotlin | 레이아웃 개념정리 & 실습) (2) | 2024.06.21 |
TIL 25일차 (행렬의 곱셈 - Kotlin | 안드로이드 위젯 개념 정리) (1) | 2024.06.20 |