프로그래머스 LEVEL 3(인사고과)
-
사용 언어 : javascript
-
해결 날짜 : 2023-01-23
-
해결 방법 :
- 인자로 받은 scores를 정렬
- 기본적으로 근무 태도 점수를 내림차순하되, 근무 태도 점수가 같은 경우는 동료 평가 점수를 오름차순으로 정렬
- 이렇게 정렬된 scores를 돌면 근무 태도 점수는 고려하지 않아도 됨
- scores를 돌며
- 완호보다 앞에 동료 평가 점수가 높은 사람이 한명이라도 있는 경우 인센티브를 받지 못하는 경우
- 동료 평가 점수가 max(현재까지 동료 평가 점수 중 최대값)보다 크거나 같은 경우, max update
- 이 때 동료 평가 점수 + 근무 태도 점수의 합이 완호보다 큰 경우, answer 추가(완호의 등수 밀려남)
- scores를 돌며
- 인자로 받은 scores를 정렬
-
회고 :
- 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