[프로그래머스 Lv. 3] 인사고과

DaeHoon·2023년 2월 18일
0

프로그래머스

목록 보기
15/16

문제

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

접근

탐욕법으로 접근.

  1. 근무태도 점수와 동료평가 점수에서 근무태도 기준으로 내림차순을 정렬하되 점수가 같으면 동료평가 점수를 기준으로 오름차순으로 정렬한다. 이렇게 정렬하는 이유는 근무태도 점수가 높은 사람의 동료평가 점수보다 낮은 사람들을 걸러내기 위해서다.

  2. 그 이후 for문을 돌리는데 이 때 주의해야 할 점은 완호보다 총 점수가 높지만, 다른 사람보다 근무태도 점수와 동료평가 점수가 낮은 사람들은 값에 포함시키면 안된다.
    예를 들어 점수 목록이 [[5,5], [3,8], [5,10]]일 때 완호는 2등이 되어야 한다. 이를 방지하기 위해 인센티브를 탈 수 있는 최소의 동료평가 점수를 mininum에 저장하고, 동료평가 점수가 minumum 이상인 원소에 대해서만 조건이 맞는지 판별한다.

  3. minimum <= score[1] 이 조건으로만 인센티브 여부를 판별할 수 있는 이유는 근무태도 점수 기준으로 내림차순 정렬를 했기 때문에 가능하다.

Code

def solution(scores):
    answer = 1
    wanho = scores[0]
    scores = sorted(scores[1:], key =lambda x: (-x[0], x[1]))
    minimum = 0
    
    for score in scores:
        if score[0] > wanho[0] and score[1] > wanho[1]:
            return -1
        
        if minimum <= score[1] and sum(score) > sum(wanho):
            answer+=1
            minimum = score[1]
    return answer
profile
평범한 백엔드 개발자

0개의 댓글