Programming/Algorithm & Data Structure
[Swift] 프로그래머스 코딩테스트 연습 > 연습문제 > 인사고과
guswlsdk
2023. 5. 3. 16:15
반응형
못 풀겠어서 풀이를 검색했고 이걸 왜 못 풀었나 싶어서 죄책감과 함께 오랜만에 글 씁니다.
문제 풀이
근무 태도와 동료 평가 점수 "모두" 다른 사원보다 낮을 경우 인센티브를 제외한다는 조건을 보고 어떤 방식으로든(이중 포문, 정렬 등) 탐색을 생각했다. 하지만 score에 길이가 최대 10만이기 때문에 O(N)으로 풀 수 있는 방법을 생각했는데 생각이 나질 않았다.
근무 태도와 동료 평가 점수 두 가지를 고려해야 하기 때문에 어려웠다. 정렬을 사용한다는 건 알았는데 말이지...
인센티브를 제외할 놈만 쉽게 알아낼 수 있도록 정리해보자...!
1. 근무 태도와 동료 평가 점수 둘 중 하나를 선택해서 먼저 내림차순으로 정렬한다.
근무 태도 점수를 내림차순으로 하기로 한다면 i 번째 근무태도는 i+1 번째 근무 태도보다 크거나 같을 것이다.
그렇다면 i 사원 이후의 i+1..2...3..4..........n 사원들은 근무 태도 점수가 낮은 경우에 모두 해당된다.
2. 인센티브 제외할 놈을 찾기 위해서는 근무 태도 점수가 같을 경우 동료 평가 점수는 오름차순으로 정렬되어야 한다.
이때 i 사원 이후의 동료 평가 점수가 낮은 경우만 고려하면 "모두" 낮은 경우에 해당 된다.
[[2,2],[1,4],[3,2],[3,2],[2,1]] -> [[3,2], [3,2], [2,1], [2,2], [1,4]]
import Foundation
func solution(_ scores:[[Int]]) -> Int {
var scores = scores
let wan = scores.first!
var result = 1
scores.sort{ $0[0] == $1[0] ? $0[1] < $1[1] : $0[0] > $1[0]}
var maxScore = 0
for score in scores {
if maxScore > score[1]{
if score == wan{
return -1
}
}else{
maxScore = max(maxScore, score[1])
if score[0] + score[1] > wan[0] + wan[1]{
result += 1
}
}
}
return result
}
반응형