본문 바로가기
알고리즘 & PS

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

by 다람이도토리 2024. 10. 29.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

정렬 문제에 크게 당했다.

어느 것을 오름차순으로 할지, 내림차순으로 할지. 잘 생각해야 하는 문제.
이와는 별도로, 정렬을 하면서 원래 찾아야 할 놈의 위치가 애매해진다.
이에 대한 처리도 고려해야 한다.

아무튼, 구하는 1명만 구하면 되는 애라서 가능한 풀이이다.

def solution(scores):
    answer = 1
    inho_att, inho_comp = scores[0]
    inho_sum = inho_att + inho_comp
    
    # 여기서 동료 점수를 내림차순으로 하면 안된다! 오름차순이어야한다.
    # 근무 태도가 최고점인 사람들 중, 동료 점수를 점점 높여서 커트라인을 형성한다.
    # 그래야, 최고점 근무태도 중 최고점 동료점수를 뽑자마자 다음으로 넘어가니까.
    # 즉, 그 다음부턴 최고점 근무태도가 아니므로, 동료점수 지는건가요? 면 탈락!
    # 그와 별도로 인호가 점수가 낮으면 탈락시켜야 한다. 정렬이면 어디있나 몰라서.
    scores.sort(key = lambda x: (-x[0], x[1]))
    max_comp = 0
    for s in scores:
        cur_att, cur_comp = s
        if inho_att < cur_att and inho_comp < cur_comp:
            return -1
        if cur_comp >= max_comp:
            max_comp = cur_comp
            if cur_att + cur_comp > inho_sum:
                answer += 1            
    return answer