프로그래머스 LEVEL 3(야근 지수)

image

  • 사용 언어 : 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