58청춘 2024. 12. 4. 16:40
728x90

문제

 

프로그래머스

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

programmers.co.kr

 

풀이

해당 문제의 경우 각 인원별로 합산 점수와 두가지 점수를 비교해 등수를 책정해야 하는 문제이다.

 

문제의 접근법으로 누적합 알고리즘을 사용했는데, 근무태도 점수를 우선으로 내리 차순 정리(동점일 경우 평가 점수를 기준으로 올림 차순 정리)를 한 뒤 등 수를 누적합 알고리즘을 적용해 구하는 방식으로 접근했다.

 

이때 주의할 점이 누적합을 구현할 때 이미 점수 배열이 근무 태도 점수를 기준으로 정렬되어 있기 때문에 이전의 인원의 근무 태도 점수는 다음 인원보다 무조건 높으며 누적합 알고리즘을 구현할 때는 평가 점수를 이용해 등수를 계산하는 것이 좋다.

 

또한 탈락되는 조건을 구현하는 것도 잊으면 안된다.

 

코드

function solution(scores) {
  let wan = scores[0];
  let state = 1;
  let before = 0;
    
  scores.sort((a, b) => {
    if (a[0] === b[0]) return a[1] - b[1];
    return b[0] - a[0];
  });
    
  for (let score of scores) {
    if (score[0] > wan[0] && score[1] > wan[1]) return -1;
    else if (before <= score[1]) {
      if (score[0] + score[1] > wan[0] + wan[1]) {
        state += 1;
      }
      before = score[1];
    }
  }
  return state;
}
728x90