๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[ํžŒํŠธ ๋ฌธ์ œ3-5] ๊ทธ๋ฆฌ๋””

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2023. 10. 6.

๋ฌธ์ œ

์ค€๊ทœ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „์€ ์ด N์ข…๋ฅ˜์ด๊ณ , ๊ฐ๊ฐ์˜ ๋™์ „์„ ๋งค์šฐ ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋™์ „์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์„œ ๊ทธ ๊ฐ€์น˜์˜ ํ•ฉ์„ K๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค. ์ด๋•Œ ํ•„์š”ํ•œ ๋™์ „ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000)

๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ๋™์ „์˜ ๊ฐ€์น˜ Ai๊ฐ€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2์ธ ๊ฒฝ์šฐ์— Ai๋Š” Ai-1์˜ ๋ฐฐ์ˆ˜)

์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— K์›์„ ๋งŒ๋“œ๋Š”๋ฐ ํ•„์š”ํ•œ ๋™์ „ ๊ฐœ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ 1 

10 4200
1
5
10
50
100
500
1000
5000
10000
50000

์˜ˆ์ œ ์ถœ๋ ฅ 1 

6

์˜ˆ์ œ ์ž…๋ ฅ 2 

10 4790
1
5
10
50
100
500
1000
5000
10000
50000

์˜ˆ์ œ ์ถœ๋ ฅ 2 

12

 

 

<<ํ’€์ด>>

 

package sec01.hint3_1;

import java.util.Scanner;

public class pjh_greedy {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        int K = sc.nextInt();

        int[] coin = new int[N];

        for (int i = 0; i < N; i++) {
            coin[i] = sc.nextInt();
        }

        int count = 0;

        for (int i = N - 1; i >= 0; i--) {
            //ํ˜„์žฌ ๋™์ „์˜ ๊ฐ€์น˜๊ฐ€ K๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผ์ง€ ๊ตฌ์„ฑ๊ฐ€๋Šฅํ•˜๋‹ค.
            if (coin[i] <= K) {
                count += (K / coin[i]);
                K = K % coin[i];
            }
        }

        System.out.println(count);
    }

}

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ง ๊ทธ๋Œ€๋กœ greedy(ํƒ์š•)์ด๋‹ค. ์ฆ‰, ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ํ‚ค์›Œ๋“œ๋Š” '๋งค ๋ฒˆ์˜ ์„ ํƒ์—์„œ ๊ฐ€์žฅ ์ข‹์•„๋ณด์ด๋Š” ์„ ํƒ์„ ํ•˜์—ฌ ์ ์ ˆํ•œ ๋‹ต์„ ์ฐพ์•„๊ฐ„๋‹ค.' ์ด๋‹ค.

 

์ด๊ฒƒ์„ ํ™œ์šฉํ•˜๋ฉด ์ตœ์†Œ์˜ ์ฝ”์ธ ๊ฐฏ์ˆ˜๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฝ”์ธ ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฒƒ์„ ๋จผ์ € ๊ฑด๋“œ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋Œ“๊ธ€