알고리즘 연습/정렬

[Lv.3 / 프로그래머스 / 파이썬] 인사고과

김세진 2023. 8. 23. 22:04
반응형

 

 

 

 

프로그래머스

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

programmers.co.kr

 

 

풀이

 

임의의 사원보다 두 점수가 모두 낮은 경우가 있는지의 여부를 빠르게 체크해야 하는 문제이다.

그러기 위해서 정렬을 사용할 수 있는데, 첫 번째 점수를 내림차순, 두 번째 점수를 오름차순으로 정렬하여 해결할 수 있다.

 

첫 번째 점수를 내림차순 정렬할 경우 우선 최상단에 있는 사원은 첫 번째 점수가 1등이기 때문에 두 점수가 모두 낮을 일은 없게 된다.

그리고 다음 사원을 순회하며 이전 사원보다 두 점수가 모두 낮은 경우가 있는지 체크한다.

만약 두 점수가 모두 낮은 경우가 있다면 목록에서 제외하며, 이전에 체크했던 사원의 점수로 그 다음 사원을 체크해나간다.

 

마지막으로 점수별로 석차가 정해지게 되는데, 점수를 내림차순으로 정렬한 다음 index 함수로 완호의 등수를 찾는다. 동석차는 크게 신경쓰지 않아도 된다.

 

 

def solution(scores):
    wanho = scores[0]
    scores.sort(key = lambda x:(-x[0],x[1]))
    
    cand = [scores[0]]
    for a, b in scores[1:]:
        if wanho[0] < cand[-1][0] and wanho[1] < cand[-1][1]:
            return -1
        
        if a < cand[-1][0] and b < cand[-1][1]:
            continue
        cand.append([a,b])
        
    cand = sorted([a+b for a,b in cand], reverse = True)
    
    return cand.index(sum(wanho))+1

 

 

 

 

반응형