[백준 2294] 동전 2 (자바스크립트)

2025. 4. 3. 20:59·코딩 테스트 공부

문제

n가지 종류의 동전이 있다. 이 동전들을 적당히 사용해서, 그 가치의 합이 k원이 되도록 하고 싶다. 그러면서 동전의 개수가 최소가 되도록 하려고 한다. 각각의 동전은 몇 개라도 사용할 수 있다.

입력

첫째 줄에 n, k가 주어진다. (1 ≤ n ≤ 100, 1 ≤ k ≤ 10,000) 다음 n개의 줄에는 각각의 동전의 가치가 주어진다. 동전의 가치는 100,000보다 작거나 같은 자연수이다. 가치가 같은 동전이 여러 번 주어질 수도 있다.

출력

첫째 줄에 사용한 동전의 최소 개수를 출력한다. 불가능한 경우에는 -1을 출력한다.

 

2294번: 동전 2


#풀이 과정

dp는 처음 점화식의 개념을 잡는 게 항상 어려운 것 같다.

 

const input = require("fs")
  .readFileSync(
    process.platform === "linux" ? "/dev/stdin" : "./BOJ/BOJ_test.txt"
  )
  .toString()
  .trim()
  .split("\n");

// 동전 개수, 목표 값값
const [N, K] = input[0].split(" ").map(Number);
const coins = input.slice(1).map(Number);

// dp 배열 생성
const dp = new Array(K + 1).fill(Infinity);
dp[0] = 0;

for (let i = 0; i < N; i++) {
  const coin = coins[i];

  // coin 값부터 K 값까지
  for (let j = coin; j <= K; j++) {
    // j를 만드는 최소 개수 => (j - coin)를 만드는 최소 개수 + 1
    dp[j] = Math.min(dp[j], dp[j - coin] + 1);
  }
}

// dp[K]가 여전히 Infinity라면 -1 출력
console.log(dp[K] == Infinity ? -1 : dp[K]);

'코딩 테스트 공부' 카테고리의 다른 글

[백준 12933] 오리 (자바스크립트)  (0) 2025.04.17
[백준 1700] 멀티탭 스케줄링 (자바스크립트)  (0) 2025.04.17
[백준 2346] 풍선 터뜨리기 (자바스크립트)  (0) 2025.04.03
[백준 2468] 안전 영역 (자바스크립트)  (0) 2025.04.02
[백준 1535] 안녕 (자바스크립트)  (0) 2025.03.13
'코딩 테스트 공부' 카테고리의 다른 글
  • [백준 12933] 오리 (자바스크립트)
  • [백준 1700] 멀티탭 스케줄링 (자바스크립트)
  • [백준 2346] 풍선 터뜨리기 (자바스크립트)
  • [백준 2468] 안전 영역 (자바스크립트)
개발새발개발자_
개발새발개발자_
바닥부터 시작하는 개발자의 하루
  • 개발새발개발자_
    개발바닥
    개발새발개발자_
  • 전체
    오늘
    어제
    • 분류 전체보기 (52)
      • 경제신문스크랩 (36)
      • 코딩 테스트 합격자 되기_자바스크립트 (1)
      • 코딩 테스트 공부 (15)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
개발새발개발자_
[백준 2294] 동전 2 (자바스크립트)
상단으로

티스토리툴바