몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 3] 인사고과 {언어 : Python} [다시 풀어 보기] 본문

알고리즘/다시 풀어 보기

프로그래머스 [Lv. 3] 인사고과 {언어 : Python} [다시 풀어 보기]

스위태니 2024. 7. 22. 16:06

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드

def solution(scores):
    answer = 1
    wanho = scores[0]
    # wanhos_work_attitude, wanhos_peer_review
    wwa, wpr = wanho
    sumW = wwa + wpr
    scores.sort(key=lambda x:(-x[0], x[1]))
    currentScore = 0
    for score in scores:
        pwa, ppr = score
        if wwa < pwa and wpr < ppr:
            answer = -1
            break
        
        if currentScore <= ppr:
            if sumW < pwa + ppr:
                answer += 1
            currentScore = ppr
        
    return answer

풀이 방법

  1. scores를 역순으로 정렬한다. 
  2. 현재 값이 currentScore보다 크거나 같고 완호의 총 값보다 크다면 완호의 등수는 낮아지기 때문에 등수를 나타내는 answer의 값에 1을 더한다.
  3. 이 과정에서 완호의 wa값과 pr값이 모두 작다면 -1을 answer에 치환하고 종료한다.

느낀점

  • 정렬을 잘했어도 방법을 잘 몰랐던 문제다.