안녕하세요. 이번에는 프로그래머스 귤 고르기 문제를 풀어보려고 합니다.
Problem
https://school.programmers.co.kr/learn/courses/30/lessons/138476
Solution
class Solution {
fun solution(k: Int, tangerine: IntArray): Int {
var answer: Int = 1
var copyK = k
tangerine.groupBy { it }.values.sortedByDescending {
it.size
}.forEach {
copyK -= it.size
if(copyK > 0) {
answer++
}
}
return answer
}
}
이번 문제는 다른 종류의 수를 최소화하기 위해서는 가장 많은 크기들을 구하면 되는 문제입니다. Kotlin에서 제공해 주는 groupBy를 이용하면 문제를 쉽게 해결할 수 있습니다.
1. GroupBy를 활용해서 그룹화합니다.
2. GroupBy의 값들을 sortedByDescending으로 내림차순으로 정렬해 줍니다. 여기서 Descending 해주는 이유는 다른 종류의 수를 최소화하기 위해서는 가장 많은 크기를 넣어야 되기 때문입니다.
3. K의 값을 채워야 하기 때문에 귤의 개수를 빼주고 만약 k의 값을 만족하지 못한다면 answer++을 해줍니다.
4. K의 값이 0 이하가 되면 정답을 출력해 줍니다.
1. 다른 사람 코드
class Solution {
fun solution(k: Int, tangerine: IntArray): Int {
var answer: Int = 0
var limit = 0
tangerine.groupBy { it }.toList().sortedByDescending { it.second.size }.forEach{
if(limit >= k){
return answer
}
limit += it.second.size
answer++
}
return answer
}
}
이번 코드는 비슷한 접근 방법으로 접근한 것을 알 수 있습니다. 여기서 핵심은 GroupBy와 sortedByDescending을 통해서 그룹화와 내림차순정렬이 중요한 것 같습니다.Performance
1. 내가 작성한 코드 | 2. 다른 사람 코드 |
반응형
'프로그래머스 Algorithm' 카테고리의 다른 글
[프로그래머스] 연속 부분 수열 합의 개수 Kotlin (2) | 2023.12.30 |
---|---|
[프로그래머스] 명예의 전당 Kotlin (0) | 2023.12.29 |
[프로그래머스] 추억 점수 Kotlin (2) | 2023.12.22 |
[프로그래머스] 멀리 뛰기 Kotlin (0) | 2023.12.21 |
[프로그래머스] N개의 최소 공배수 Kotlin (2) | 2023.12.20 |