-
[CodeKata] 프로그래머스(Lv3) : 야근 지수Algorithm 2022. 2. 27. 03:46반응형
🥋 Oooth More!! (Level 3)
🧮 풀이
다양한 반복문이나 이분탐색 등 많은 방법을 고민했지만 분기가 너무 많았고, 모범답안을 보니 생각보다 간단하게 풀 수 있었다.
🖇 리뷰
특정 알고리즘 공식보다는, 오히려 문제 자체를 직관적으로 푼 풀이가 쉽게 정답을 도출하는 문제였다.
function solution(n, works) { if(works.reduce((a,b) => a+b) <= n) return 0; let sorted = works.sort((a,b) => a-b); const len = works.length; while(n) { const max = sorted[len-1]; for(let i = len-1; i >= 0; i--) { if(sorted[i] >= max) { sorted[i]--; n--; } if(!n) break; } } return sorted.reduce((a,b) => a + Math.pow(b, 2), 0); }
- works의 모든 합이 n보다 작을 경우 모든 사람이 항상 야근을 해야 하는 경우이므로, 이 떄는 0을 반환한다.
- sorted는 works를 오름차순으로 재정렬한 배열이다. 이의 최대값부터 순회하면서 야근시간을 1씩 뺀 배열을 만들 것이다.
- len은 works 배열의 길이로, 축약해서 사용하기 위해 선언한 변수다.
- while문을 반복하며, n이 0보다 큰 동안 지속된다. 또, 반복문 내에서도 n이 0이 되면 break한다. (0이 되면 모든 야근시간을 소모)
- max는 현재 sorted의 최대값으로, 가장 오른쪽 끝(len-1) 요소를 가져온다.
- sorted를 역으로 순회하며, 현재값(sorted[i])가 max보다 크거나 갖다면 야근지수를 최소화하기 위해 1을 빼주며, n도 1 차감한다.
- n이 0이 되면 최대한으로 차감했으므로, sorted 배열을 야근지수로 계산해준다. reduce() 사용, 현재값의 제곱을 누적합한다.
반응형'Algorithm' 카테고리의 다른 글
[CodeKata] 프로그래머스(Lv3) : 최고의 집합 (0) 2022.03.12 [CodeKata] 프로그래머스(Lv3) : 줄 서는 방법 (0) 2022.03.06 [CodeKata] 프로그래머스(Lv3) : 멀리 뛰기 (0) 2022.02.19 [CodeKata] 프로그래머스(Lv3) : 거스름돈 (0) 2022.02.13 [CodeKata] 프로그래머스(Lv3) : 스티커 모으기(2) (0) 2022.02.05