반응형
1. 문제
https://school.programmers.co.kr/learn/courses/30/lessons/12927
2. 코드
이 문제를 보고 "아, 이건 요소들의 값을 고르게 해야하는 문제구나! " 까지는 파악했다. "근데 이걸 어떻게 하지?" 가 문제였다. while 문 안에 for문을 쓰지 말아야한다는 강박에 갇혀... while이랑 for 둘 중 하나만 쓰는 방식을 생각하다가 도저히 각이 안나오는 것이다.. 어떻게 둘 중 하나만 쓰고 이걸 처리해!? 하고 구글링을 해봤더니... 둘 다 사용해도 효율성 테스트에 통과하는 것을 보게 되었다. 엥? 둘 다 써도 되나보네?!
이 문제의 핵심은 요소 간 편차를 고르게 해주는 것이다. 그게 전부다.
function solution(n, works) {
// 예외처리. 일의 총합이 n보다 작거나 크면 야근 지수가 0
if(works.reduce((a,c) => a += c) <= n) return 0;
// 모든 요소의 편차를 줄여주기 위해 오름차순으로 정렬해
// 큰 값이 뒤로 가게 해줌(내림차순도 가능할 듯)
let sorted = works.sort((a,b) => a-b);
while(n) {
// 항상 배열 속 큰 값을 max 변수에 저장하고,
const max = sorted[works.length-1];
// 배열을 순회하며 max값보다 크거나 같은 요소들을 -1해주며 요소 간 편차 줄여줌
for(let i = works.length-1; i >= 0; i--) {
if(sorted[i] >= max) {
sorted[i]--;
n--;
}
// 만약 n을 다 썼으면 break
if(!n) break;
}
}
return sorted.reduce((a,c) => a + Math.pow(c, 2), 0);
}
되도록 while안에는 for를 쓰지 않는 것이 좋지만, 방법이 도저히 생각나지 않으면 마음 가는대로 먼저 해봐야겠다. 겁먹지 말기.
이해에 참고한 블로그)
복기
6/2
반응형
'프로그래머스 > 구현' 카테고리의 다른 글
[문자열] 프로그래머스 'n진수 게임' - js (0) | 2023.04.07 |
---|---|
[문자열] 프로그래머스 '압축' - js (0) | 2023.04.06 |
[문자열&소수] 프로그래머스 'k진수에서 소수 개수구하기' - js (0) | 2023.04.05 |
[수학] 프로그래머스 '최고의 집합' - js (0) | 2023.04.04 |
[구현] 프로그래머스 '이중우선순위큐' - js (0) | 2023.04.04 |