https://school.programmers.co.kr/learn/courses/30/lessons/138476
풀이
더보기
최소의 종류로 과일을 담는다 = 제일 많이 생산된 과일 순으로 채운다
즉, 종류별로 갯수를 찾은 다음, 이를 내림차순으로 정렬하고, 과일 갯수만큼 빼버리면 됨~
class Solution {
fun solution(k: Int, tangerine: IntArray): Int {
var answer = k
var count = 0
var tangerineSize = tangerine.distinct()
var tangerineCount = IntArray(tangerineSize.size)
tangerineSize.forEachIndexed { index, i ->
tangerineCount[index] = test(tangerine, i)
}
tangerineCount.sortedDescending().forEach {
if(answer > it) {
answer -= it
count++
} else {
return if(answer > 0) {
count + 1
} else {
count
}
}
}
return 0
}
fun test(tangerine: IntArray, filter : Int) : Int {
var count = 0
tangerine.forEach {
if(it == filter) count++
}
return count
}
}
++) 2초 이상 걸리는 로직이 있다? 이거 백준이었으면 백퍼 빠따각이다; 하면서 다른 사람의 풀이를 찾아봤다.
groupby 라는 매서드가 있던데, 원하는 조건으로 묶어준다.
예를 들어서, {1, 3, 2, 5, 4, 5, 2, 3}이라는 숫자 자료형 배열이 있다 가정한다.
tangerine.groupBy { it }.toList()
라고 입력하면
[(1, [1]), (3, [3, 3]), (2, [2, 2]), (5, [5, 5]), (4, [4])]
it, 즉 tangerine이라는 배열을 돌면서 같은 조건(it이라고 입력했으니 배열의 요소가 같은)에 해당하는 값으로 묶인다.
이를 뒤에 묶인 숫자의 갯수만큼 descending(자바는 모르겠는데 코틀린은 descending의 조건을 걸 수 있나보다! 하나 배워감)해서 정렬한 후에 두 번째 요소의 크기 만큼 k를 넣는 방법이 있다.
println(tangerine.groupBy { it }.toList().sortedByDescending { it.second.size })
반응형
'스터디(programmers)' 카테고리의 다른 글
Kotlin] 프로그래머스 lv.2, JadenCase 문자열 만들기 (0) | 2023.04.05 |
---|---|
Java] 프로그래머스 lv.0, 진료 순서 정하기 (0) | 2023.03.31 |
Java] 프로그래머스 lv.0, 외계어 사전 (0) | 2023.03.22 |
Java] 프로그래머스 lv.1, 저주의 숫자 3 (0) | 2023.03.20 |
Kotlin] 프로그래머스 lv.2, 기능 개발 (0) | 2023.03.20 |