프로그래머스 LEVEL 3(야근 지수)
-
사용 언어 : javascript
-
해결 날짜 : 2022-09-29
- 해결 방법 :
- works의 원소의 합이 n보다 작거나 같다면 0 반환
- works 내림차순 정렬
- sort를 사용하지 않고 순서를 정렬하기 위해 works를 돌며 max보다 크거나 같으면 감소
- 회고 :
- 처음에 while문 속 sort() 함수로 정렬을 수행하며 0번 인덱스를 감소시켰는데, 효율성 문제 발생
- 그 다음 max값을 가진 index를 찾아 감소시켰으나, sort()랑 마찬가지
- 그 다음 ‘최고의 집합’ 문제에서 풀었던 방식으로 (works 배열의 합 - n)을 works.length로 나눈 몫과 나머지로 제곱 값을 최소화 하려 했으나 works 배열 속 값들의 차이가 크다면 옳지 않은 접근법
- sort()를 사용하지 않고 순서를 정렬하는 방법을 생각하는데 시간을 오래 소요함..
-
코드
function solution(n, works) { if (works.reduce((acc, cur) => acc + cur, 0) <= n) return 0; works.sort((a, b) => b - a); while (n) { const max = works[0]; for (let i = 0; i < works.length; i++) { if (works[i] >= max) { works[i]--; n--; } if (!n) break; } } return works.reduce((acc, cur) => acc + Math.pow(cur, 2), 0); }
- 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges