[프로그래머스] 야근 지수 / JavaScript / Level 3

KimYoungWoong·2022년 12월 6일
0

Programmers

목록 보기
37/60
post-thumbnail

🚩문제 주소


📄풀이

그리디

먼저 주어진 배열을 오름차순으로 정렬해둡니다.

n이 0이 될 때까지 반복합니다.
배열에 가장 마지막 원소가 최댓값이므로 최댓값을 따로 설정해두고, 배열에 끝에서부터 앞까지 반복하는데, 원소가 최댓값과 같거나 크다면 -1을 해주고, n도 -1 합니다.
n이 0 이하라면 종료합니다.

배열의 원소가 전부 0 이하라면 0을 반환하고, 아니라면 각 원소를 제곱한 후에 모두 더해서 반환합니다.



👨‍💻코드

function solution(n, works) {
  works.sort((a, b) => a - b);
  while (n) {
    const max_value = works.at(-1);

    for (let i = works.length - 1; i >= 0; i--) {
      if (works[i] >= max_value) {
        if (n <= 0) break;
        works[i]--;
        n--;
      }
    }
  }

  return works.every((v) => v <= 0) ? 0 : works.map((v) => v ** 2).reduce((a, c) => a + c);
}

profile
블로그 이전했습니다!! https://highero.tistory.com

0개의 댓글