https://school.programmers.co.kr/learn/courses/30/lessons/152995?language=kotlin
처음에는 완호의 점수만 생각하고 필터링을 했는데
문제를 잘 읽어보면 임의의 직원도 다른 직원에 비해 두 점수가 모두 낮으면 인센티브에서 제외된다는걸
먼저 처리해줘야했다. 이를 위해서는 모든 직원들을 다 체크해볼 필요가 있었는데
2중 for 문은 절대로 쓰기 싫었기에 고민을 하다가
정렬을 하기로 했다.
하나를 기준으로 정렬을 해두면 두 점수 모두 확인할 필요 없이
나머지 점수만 비교해주면 되기 때문에 시간복잡도를 줄일 수 있었다.
class Solution {
fun solution(scores: Array<IntArray>): Int {
val oneho = scores[0]
var maxSecondScore = 0
val filteredScores = mutableListOf<IntArray>()
// scores를 첫 번째 점수를 기준으로 내림차순 정렬
val sortedScores = scores.sortedWith(compareByDescending<IntArray> { it[0] }.thenBy { it[1] })
// 두 점수가 모두 낮은 사원을 필터링
for (score in sortedScores) {
// 현재 점수의 두 번째 점수가 이전까지의 최대 두 번째 점수보다 작으면 인센티브 X
if (score[1] < maxSecondScore) {
// 완호가 인센티브 자격이 없다면 -1 반환
if (score.contentEquals(oneho)) {
return -1
}
continue
}
// 두 번째 점수의 최대값을 갱신
maxSecondScore = maxOf(maxSecondScore, score[1])
filteredScores.add(score)
}
val scoreSums = filteredScores.map { it[0] + it[1] }
val sortedSums = scoreSums.sortedDescending()
val onehoScoreSum = oneho[0] + oneho[1]
val rank = sortedSums.indexOf(onehoScoreSum) + 1
return rank
}
}
반응형
'알고리즘' 카테고리의 다른 글
프로그래머스 - 연속 펄스 부분 수열의 합 (3) | 2024.08.28 |
---|---|
프로그래머스 - 모음사전 (0) | 2024.08.28 |
프로그래머스 - 피로도 (0) | 2024.08.27 |
프로그래머스 - 할인 행사 (0) | 2024.08.27 |
프로그래머스 - 숫자 짝꿍 (0) | 2024.08.27 |
프로그래머스 - 혼자 놀기의 달인 (0) | 2024.08.26 |
프로그래머스 - 연속 부분 수열 합의 개수 (0) | 2024.08.26 |
프로그래머스 - 택배상자 (0) | 2024.08.25 |