Heeto
article thumbnail
링크 : https://school.programmers.co.kr/learn/courses/30/lessons/152995

 

1. 코드


<python />
def solution(scores): ho = scores[0] sum_ho = sum(scores[0]) scores.sort(key=lambda x: (-x[0],x[1])) answer = 0 before = 0 for score in scores: if ho[0] < score[0] and ho[1] < score[1]: return -1 if before <= score[1]: if sum(score) > sum_ho: answer += 1 before = score[1] return answer+1

 

2. 풀이


<python />
''' 4 4 / 3 3 / 2 4 가 있을 때 3 3과 2 4는 같은 합임에도 3 3은 4 4보다 모두 작아서 고과를 받지 못한다. 고과를 받지 못하는 인원 제외 -> 완호가 포함되면 -1 -> 완호보다 합이 큰 사람의 수 세기 n번 돌면서 두 수가 종합적으로 가장 큰 사람 찾기? -> 판단 불가능 점수별로 두 번 정렬해서 2n번 탐색으로 내 앞의 친구보다 작으면 제외? - 17 5 / 6 3 / 4 4 같은 경우라면? 내 앞보다는 큰 것도 있지만 내 앞앞보다는 모두 작다. - 두번째로 정렬하게 되면 5 17 / 4 4 / 3 6 이 되어서 일단 제외가 되긴 한다. - 모든 경우에서 되는지는 확인하기 어렵다. +) 합, 첫번째, 두번째 를 기준으로 정렬한다면 내 바로 앞에 있는 친구와만 비교할 수 있을까? '''

문제를 해결하면서 내 생각을 정리한 내용이다.

 

두 번 정렬하는 방법으로 시도해보았지만 결국 실패했다. 그래서 블로그를 참고했으나 아이디어도 좀 비슷했고 정렬의 기능을 조금만 더 확장해서 해석했다면 충분히 해결가능했을 것 같다. 정렬의 기능을 확장해서 해석한다는 말은 정렬로 어떤 조건을 만족시킬 수 있는지를 더 깨닫는 것을 말한다.

 

 

  • 첫 번째 원소를 기준으로 내림차순 정렬한다 -> 나보다 뒤에 있는 사람들은 나보다 근무태도 점수가 같거나 낮다.
    • 근무태도를 기준으로 오름차순 정렬함으로써 동료평가 점수만 신경쓰도록 한다.
  • 두 번째 원소를 기준으로 오름차순 정렬한다 -> 나보다 뒤에 있는 사람들은 나보다 동로평가 점수가 같거나 높다.
    • 근무태도 점수는 내 앞에 있는 사람들이 나보다 높거나 같으므로 지금까지의 동료평가 최대 점수가 내 점수보다 높다면 나는 고과에서 제외된다.
    • 같은 근무태도 점수에서 동료평가 점수가 나보다 높다고 제외되는 것을 방지하기 위해 내림차순으로 정렬한다.

 

이런 정렬방식을 통해 생각보다 간단하게 고과에서 제외될 사람들을 걸러낼 수 있다.

 

profile

Heeto

@Heeto

🐧 블로그를 옮기는 과정에서 문법과 구성에 조금씩 오류가 있을 수 있습니다. 틀린 부분이 있다면 언제든지 알려주세요. 🐧