Skip to content

[Algorithm] 인사고과 #247

@hwangJi-dev

Description

@hwangJi-dev

💬 문제

https://school.programmers.co.kr/learn/courses/30/lessons/152995


💬 Idea

  • 점수 배열 scores를 근무 태도 점수는 내림차순으로, 근무 태도 점수가 같다면 동료 평가 점수는 오름차순으로 정렬시킨다.
  • 완호의 점수가 다른 사원들의 두 점수와 비교하여 모두 낮은 경우가 있다면 바로 -1을 리턴하여 완호가 인센티브를 받을 수 없음을 리턴한다.
  • 근무 태도 점수내림차순으로 내려가므로 만일 임의의 사원의 동료 점수가 max값보다 작다면 두 점수 모두 낮다는 것을 의미하므로
    • 만일 임의의 사원의 동료 점수가 max값보다 작다면 두 점수 모두 낮으므로 rank를 올리지 않고, max값도 갱신하지 않는다
    • 만일 임의의 사원의 동료 점수가 max값보다 크거나 같다면
      • 임의의 사원의 점수 합과 완호의 점수 합을 비교해서 완호보다 더 높다면 상위에 위치한 것이므로 rank + 1을 해준다.
      • 동료 점수 max값을 갱신한다

💬 풀이

import Foundation

func solution(scores:[[Int]]) -> Int {
    let wanhoScore = scores[0]
    let sum = wanhoScore[0] + wanhoScore[1]
    let scoreArr = scores.sorted(by: { $0[0] > $1[0] || ($0[0] == $1[0] && $0[1] < $1[1]) })
    var rank = 1
    var colleagueScoreMax = 0
    
    for i in scoreArr {
        // 완호가 인센티브를 받지 못하는 경우
        if wanhoScore[0] < i[0] && wanhoScore[1] < i[1] {
            return -1
        }
        
        // 0번은 내림차순으로 내려가므로 1번 점수가(동료점수) 크거나 같을 경우에만 두 점수가 모두 낮지 않음을 의미함
        if colleagueScoreMax <= i[1] {
            // 완호의 점수보다 더 높다면 상위에 위치한 것이므로 rank + 1
            if sum < i[0] + i[1] {
                rank += 1
            }
            
            colleagueScoreMax = i[1]
        }
    }
    
    return rank
}

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions