JAVA/Algorithm

[algorithm] ๊ทธ๋ฆฌ๋””(greedy, ํƒ์š•) ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋น…์ฝœํŒ 2023. 6. 11. 21:16
728x90
๋ฐ˜์‘ํ˜•

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


  • ํƒ์š•, ์š•์‹ฌ์Ÿ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ.
  • ๋ฏธ๋ž˜๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ๊ฐ ๋‹จ๊ณ„์—์„œ ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๊ธฐ๋ฒ•
  • ์„ ํƒ์˜ ์ˆœ๊ฐ„๋งˆ๋‹ค ๋‹น์žฅ ๋ˆˆ์•ž์— ๋ณด์ด๋Š” ์ตœ์ ์˜ ์ƒํ™ฉ๋งŒ์„ ์ซ’์•„ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ์ผ๋ฐ˜์ ์ธ ์ƒํ™ฉ์—์„œ ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ๋งŽ๋‹ค
  • ํ˜„์žฌ์˜ ์ตœ์  ํ•ด != ์ „์ฒด์˜ ์ตœ์  ํ•ด

 

 

 ๐Ÿงฆ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์กฐ๊ฑด


์„œ์šธ์—์„œ ๋Œ€์ „์„ ๊ฑฐ์ณ ๋ถ€์‚ฐ๊นŒ์ง€ ๊ฐ€๋Š” ์ตœ์ ์˜ ๊ฒฝ๋กœ๋ฅผ ์„ ํƒํ•ด๋ผ.

 

 

1. ํ˜„์žฌ์˜ ์„ ํƒ์ด ๋ฏธ๋ž˜์˜ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

ํƒ์š•์Šค๋Ÿฐ ์„ ํƒ ์กฐ๊ฑด

 

2. ๋ถ€๋ถ„์˜ ์ตœ์  ํ•ด๊ฐ€ ๋ชจ์ด๋ฉด ์ „์ฒด์˜ ์ตœ์  ํ•ด๊ฐ€ ๋œ๋‹ค.

์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ ์กฐ๊ฑด

 

๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์˜ ํ•ต์‹ฌ์€ ์ •๋ ฌ์ด๋‹ค.

์–ด๋–ป๊ฒŒ ์ •๋ ฌํ•ด์•ผ ์ด ๋‘๊ฐ€์ง€ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์„์ง€ ์ƒ๊ฐํ•ด์•ผํ•œ๋‹ค.

 

 

๐Ÿค– ๊ทธ๋ฆฌ๋””๋Š” ์™œ ์‚ฌ์šฉํ• ๊นŒ?


๋น ๋ฅธ ์†๋„

 : ํ•ญ์ƒ ์ตœ์ ์˜ ์„ ํƒ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— dp๋ณด๋‹ค๋„ ๋น ๋ฅธ ์†๋„๋ฅผ ์ž๋ž‘ํ•จ.

dp์˜ ๊ฒฝ์šฐ ํ•ญ์ƒ ์ตœ์  ํ•ด๋ฅผ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ ๋ คํ•œ๋‹ค.

 

ํ˜„์‹ค ์„ธ๊ณ„์—์„œ๋Š” 100% ์ตœ์  ํ•ด๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ผ์— ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ณ ์ž ์‚ฌ์šฉํ•œ๋‹ค.

ex. ๋„ค๋น„ ๊ธธ ์•ˆ๋‚ด

 

๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ œ 

: ๊ฑฐ์Šค๋ฆ„ ๋ˆ

- ์ตœ์ ์˜ ํ•ด๋ฅผ ๋น ๋ฅด๊ฒŒ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ€์žฅ ํฐ ํ™”ํ ๋‹จ์œ„๋ถ€ํ„ฐ ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋ฉด ๋œ๋‹ค.

- N์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ค˜์•ผ ํ•  ๋•Œ, ๊ฐ€์žฅ ๋จผ์ € 500์›์œผ๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ์„ ๋งŒํผ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.

  -> ์ดํ›„์— 100์›, 50์›, 10์› ๋™์ „์„ ์ฐจ๋ก€๋Œ€๋กœ ๊ฑฐ์Šฌ๋Ÿฌ ์ค„ ์ˆ˜ ์žˆ์„ ๋งŒํผ ๊ฑฐ์Šฌ๋Ÿฌ ์ค€๋‹ค.

- N = 1,260์ผ ๋•Œ์˜ ์˜ˆ์‹œ๋ฅผ ํ™•์ธํ•ด๋ณด์ž.

 

 

 

- ๊ฐ€์žฅ ํฐ ํ™”ํ ๋‹จ์œ„๋ถ€ํ„ฐ ๋ˆ์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ๋Š” ๊ฒƒ์ด ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

   -> ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋™์ „ ์ค‘์—์„œ ํฐ ๋‹จ์œ„๊ฐ€ ํ•ญ์ƒ ์ž‘์€ ๋‹จ์œ„์˜ ๋ฐฐ์ˆ˜์ด๋ฏ€๋กœ ์ž‘์€ ๋‹จ์œ„์˜ ๋™์ „๋“ค์„ ์ข…ํ•ฉํ•ด ๋‹ค๋ฅธ ํ•ด๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

- ๋งŒ์•ฝ 800์›์„ ๊ฑฐ์Šฌ๋Ÿฌ ์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ ํ™”ํ ๋‹จ์œ„๊ฐ€ 500์›, 400์›, 100์›์ด๋ผ๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

- ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์—์„œ๋Š” ์ด์ฒ˜๋Ÿผ ๋ฌธ์ œ ํ’€์ด๋ฅผ ์œ„ํ•œ ์ตœ์†Œํ•œ์˜ ์•„์ด๋””์–ด๋ฅผ ๋– ์˜ฌ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ์ •๋‹นํ•œ์ง€ ๊ฒ€ํ† ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

 

 

์ž๋ฐ” ๋ฌธ์ œ ํ’€์ด

public static void main(String[] args) {
    int n = 1260;
    int cnt = 0;
    int[] coinTypes = {500, 100, 50, 10};

    for (int i = 0; i < 4; i++){
        cnt += n / coinTypes[i];
        n %= coinTypes[i];
    }

    System.out.println(cnt); // 6
}

 

 

๋” ๋งŽ์€ ๊ทธ๋ฆฌ๋”” ๋ฌธ์ œ ํ™•์ธํ•˜๊ธฐ

 

 

๐Ÿจ reference

https://www.youtube.com/watch?v=_IZuE7NIeW4 

https://www.youtube.com/watch?v=2zjoKjt97vQ 

https://hanamon.kr/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%83%90%EC%9A%95%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-greedy-algorithm/

728x90
๋ฐ˜์‘ํ˜•