문제

https://school.programmers.co.kr/learn/courses/30/lessons/12982

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

접근

 

앞서 풀었던 조합 문제와 거의 같다. 

주어진 부서별 예산 n 개의 합이 주어진 예산 m 을 넘지 않을 때까지 합한다.

만약 sum >= m 이면 해당 재귀 종료 준비를 한다.

 

풀이

접근1. 재귀

결과: 틀렸습니다! 재귀로 풀었는데 계속 다른 두 케이스가 같은 답이 나왔다.

 

접근2: 그냥 단순하게 접근하기로. 반복문

결과: 틀렸습니다! 답은 맞게 나오는데 테스트 케이스 몇 개에서 걸렸다.


  const N = d.length;
  let answer = 0;
  let sum = 0;

  for (let i = 0; i < N; i++) {
    sum += sortedD[i];
    if (sum > budget) {
      answer = i;
      break;
    }
  }
  if (sum <= budget) answer = d.length;

  return answer;

접근3: sort 추가

결과: 맞았습니다!

  const sortedD = d.sort((a, b) => a - b);
  const N = d.length;
  let answer = 0;
  let sum = 0;

  for (let i = 0; i < N; i++) {
    sum += sortedD[i];
    if (sum > budget) {
      answer = i;
      break;
    }
  }
  if (sum <= budget) answer = d.length;

  return answer;

function solution(d, budget) {
    d.sort((a, b) => a - b);

    while (d.reduce((a, b) => (a + b), 0) > budget) d.pop();

    return d.length;
}

'Board > 알고리즘' 카테고리의 다른 글

프로그래머스 방문 길이  (0) 2023.02.11
프로그래머스 멀쩡한 사각형  (0) 2023.02.10
프로그래머스 소수 만들기  (0) 2023.02.10
백준 9663 N-Queen  (0) 2023.02.08
백준 15652 N과 M(4)  (0) 2023.02.05

+ Recent posts