Code KATA
Programmers 사과 장수 with Kotlin
어쩌다 개발자 주인장
2023. 12. 4. 11:23
https://school.programmers.co.kr/learn/courses/30/lessons/135808
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
class Solution {
fun solution(k: Int, m: Int, score: IntArray): Int {
var answer: Int = 0
var appleList = listOf<Int>()
var appleBox = mutableListOf<Int>()
appleList = score.sortedDescending()
for(i in 0 until appleList.size) {
if(appleBox.size < m) {
appleBox.add(appleList[i])
if(appleBox.size == m) {
answer += appleBox.minOf{it} * m
appleBox.clear()
}
}
}
return answer
}
}
이런식으로 풀었더니 시간이 길게 걸리는게 275ms가 있었다,,,
이런식으로는 안되겠다 싶어 좀 더 꼼꼼히 보니 결국엔 사실 m사이즈만큼의 각 배열에서 마지막 숫자만큼만 m과 곱해준다는 규칙성을 발견하고 코드를 다시 수정했다.
class Solution {
fun solution(k: Int, m: Int, score: IntArray): Int {
var answer: Int = 0
score.sortDescending()
var lastNum = 0
score.forEach{
lastNum++
if(lastNum%m == 0){
answer+= it*m
}
}
return answer
}
}
배열에 굳이 넣을 필요없이 m 에 딱 떨어지는 숫자일 때 마다 m에 딱 떨어지는 숫자에 m을 곱해주면 된다.
효율이 2배이상 좋아졌다,,