프로그래머스 LEVEL 3(인사고과)

image

  • 사용 언어 : javascript

  • 해결 날짜 : 2023-01-23

  • 해결 방법 :

    • 인자로 받은 scores를 정렬
      • 기본적으로 근무 태도 점수를 내림차순하되, 근무 태도 점수가 같은 경우는 동료 평가 점수를 오름차순으로 정렬
    • 이렇게 정렬된 scores를 돌면 근무 태도 점수는 고려하지 않아도 됨
      • scores를 돌며
        • 완호보다 앞에 동료 평가 점수가 높은 사람이 한명이라도 있는 경우 인센티브를 받지 못하는 경우
        • 동료 평가 점수가 max(현재까지 동료 평가 점수 중 최대값)보다 크거나 같은 경우, max update
          • 이 때 동료 평가 점수 + 근무 태도 점수의 합이 완호보다 큰 경우, answer 추가(완호의 등수 밀려남)
  • 회고 :

    • forEach 안에서 return은 함수 취급이라 함수의 종료밖에 안된다.
  • 코드

    const equals = (a, b) => {
      if (a.length === b.length) {
        return a.every((v, i) => v === b[i]);
      }
    
      return false;
    };
    
    function solution(scores) {
      let answer = 1,
        max = 0;
      const wanho = scores[0];
      const wanhoScore = wanho[0] + wanho[1];
      scores.sort((a, b) => (a[0] === b[0] ? a[1] - b[1] : b[0] - a[0]));
    
      for (const score of scores) {
        if (score[1] < max && equals(score, wanho)) {
          return -1;
        } else if (score[1] >= max) {
          max = score[1];
          if (wanhoScore < score[0] + score[1]) {
            answer++;
          }
        }
      }
    
      return answer;
    }
    
  • 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges