๐Ÿ’ป

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Greedy Algorithm ๋ณธ๋ฌธ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๊ธฐ๋ณธ๊ธฐ ๋‹ค์ง€๊ธฐ

[์•Œ๊ณ ๋ฆฌ์ฆ˜] ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - Greedy Algorithm

๋˜ํšจ๋‹ˆ 2020. 2. 6. 03:49

ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ž€? ์–ด๋–ค ์„ ํƒ์„ ํ•ด์•ผํ•  ๋•Œ ๊ทธ ๋‹น์‹œ์— ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค. 

 

- ์ˆœ๊ฐ„์˜ ์„ ํƒ์€ ๊ทธ ๋‹น์‹œ์˜ ์ตœ์ ์˜ ์„ ํƒ์ด๋‹ค. ์ด๋Ÿฐ ์„ ํƒ๋“ค์ด ๋ชจ์—ฌ ์ตœ์ข…์ ์ธ ํ•ด๋‹ต์„ ์–ป๋Š”๋‹ค๊ณ  ํ•˜์—ฌ ์ตœ์ข… ํ•ด๋‹ต์ด ์ตœ์ ์ด๋ผ๋Š” ๋ณด์žฅ์€ ์—†๋‹ค.

   ๋”ฐ๋ผ์„œ, ํƒ์š•์  ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ•ด๋‹ต์„ ์–ป์€ ํ›„์— ์ด ํ•ด๋‹ต์ด ์ตœ์ ์ธ์ง€ ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค. 

 

- ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ์ ˆ์ฐจ

   1๋‹จ๊ณ„) ์„ ์ •๊ณผ์ •(selection procedure)

             : ํ˜„์žฌ ์ƒํƒœ์—์„œ ๊ฐ€์žฅ ์ข‹์€ ์„ ํƒ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ํ•ด๋‹ต์„ ์ฐพ์•„์„œ ํ•ด๋‹ต๋ชจ์Œ(solution set)์— ํฌํ•จ์‹œํ‚จ๋‹ค.

   2๋‹จ๊ณ„) ์ ์ •์„ฑ๊ฒ€์‚ฌ(feasibility test)

             : ์ƒˆ๋กœ ์–ป์€ ํ•ด๋‹ต๋ชจ์Œ์ด ์ ์ ˆํ•œ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

   3๋‹จ๊ณ„) ํ•ด๋‹ต ๊ฒ€์‚ฌ(solution check)

             : ์ƒˆ๋กœ ์–ป์€ ํ•ด๋‹ต๋ชจ์Œ์ด ์ตœ์ ์˜ ํ•ด์ธ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค. 

 

- ๋Œ€ํ‘œ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ
  • ์ตœ์†Œ๋น„์šฉ ์‹ ์žฅํŠธ๋ฆฌ
    • Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋ฐฐ๋‚ญ ๋ฌธ์ œ
    • 0-1 ๋ฐฐ๋‚ญ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ
  • ์ตœ์  ๋จธ์ง€ ํŒจํ„ด
  • ํ—ˆํ”„๋งŒ ์ฝ”๋“œ(์ตœ์  ์ด์ง„์ฝ”๋“œ ์ฐพ๊ธฐ) 

 


๊ฑฐ์Šค๋ฆ„๋ˆ ๋ฌธ์ œ

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ๋จผ์ € ๋„์ „ํ•ด๋ณด์ž. 

https://www.acmicpc.net/problem/11047

 

11047๋ฒˆ: ๋™์ „ 0

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

www.acmicpc.net

<์ƒ๊ฐํ•ด๋ณด์ž>

์œ„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ค๊ณ„ ์ ˆ์ฐจ์— ๋”ฐ๋ผ์„œ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

์Œ, ๋™์ „์ด ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๊ฒŒ๋” ํ•˜๋ ค๋ฉด ํฐ ์•ก์ˆ˜์˜ ๋™์ „๋ถ€ํ„ฐ ์ƒ๊ฐํ•ด์•ผํ•˜๊ณ ... ๋Œ€๋ถ€๋ถ„ ์ด๋Ÿฐ์‹์œผ๋กœ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

์ •๋ฆฌํ•˜์ž๋ฉด,

1. ์ฃผ์–ด์•ผ ํ•  ๊ฑฐ์Šค๋ฆ„๋ˆ์„ ๋„˜์ง€ ์•Š์€ ๊ฐ€์žฅ ํฐ ์•ก์ˆ˜์˜ ๋™์ „์„ ์ค€๋‹ค.

2. 1 ์—์„œ ๊ฑด๋„ค์ค€ ๋™์ „์˜ ์ด์•ก์ด ๊ฑฐ์Šค๋ฆ„ ๋ˆ๊ณผ ์ •ํ™•ํ•˜๊ฒŒ ์ผ์น˜ํ•  ๋•Œ๊นŒ์ง€ 1์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

์œ„์—์„œ 1 . ์€ ์„ ์ •๊ณผ์ •์— ํ•ด๋‹น๋˜๊ณ , ์„ ์ •๋œ ๋™์ „์ด ์ตœ์ข… ํ•ด๋‹ต์— ํฌํ•จ๋  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์ด ์ ์ •์„ฑ๊ฒ€์‚ฌ์ด๋‹ค. ๋งˆ์ง€๋ง‰์œผ๋กœ, ํ˜„์žฌ๊นŒ์ง€ ์„ ์ •๋œ ๋™์ „์˜ ์ด์•ก์ด ๊ฑฐ์Šค๋ฆ„๋ˆ๊ณผ ์ผ์น˜ํ•˜๋Š” ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ฒƒ์€ ํ•ด๋‹ต๊ฒ€์‚ฌ ์ด๋‹ค.

 

๋ฌธ์ œ : ๋™์ „์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ตœ์†Œ๊ฐ€ ๋˜๋„๋ก ๊ฑฐ์Šค๋ฆ„ ๋ˆ์„ ์ฃผ๋ ค๋ฉด?

์ž…๋ ฅ: changes[] ์•ก๋ฉด๊ฐ€๊ฐ€ ํฐ ๋™์ „์ด ํฐ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ, n : ๊ฑฐ์Šค๋ฆ„ ๋ˆ ์•ก์ˆ˜

์ถœ๋ ฅ: cc[] : ๊ฑฐ์Šค๋ฆ„๋ˆ์—์„œ ํ•„์š”ํ•œ ๊ฐ ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค. 

void minChange(int changes[], int n, int &cc[]){
      cc[] = {0};
      for(int i=1; i<=r; i++){
          while(n>=changes[i]){
              cc[i]++;
              n=n-changes[i];
          }
      }
}

์œ„์˜ ์˜ˆ์‹œ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ, ํ•„์š”ํ•œ ๋™์ „์˜ ์ด ๊ฐœ์ˆ˜๋งŒ ๊ตฌํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์ž”๋ˆ์˜ ์ข…๋ฅ˜๋ณ„๋กœ ๋ช‡ ๊ฐœ์˜ ๋™์ „์ด ํ•„์š”ํ•œ ์ง€ ๋ฐฐ์—ด์— ๋„ฃ์„ ํ•„์š” ์—†์ด ์ž”๋ˆ ๊ฐœ์ˆ˜๋งŒ ๋”ํ•ด์ฃผ๋ฉด ๋˜๊ธฐ๋•Œ๋ฌธ์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ ํ’€๋ฆฌ๋Š” ๋ฌธ์ œ์˜€๋‹ค. 

๋ฌธ์ œ์˜ ํ’€์ด ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ

 

 

 

 

์ดํ•ด๊ฐ€ ๋‹ค ๋˜์—ˆ๋‹ค๋ฉด, ๋ช‡๊ฐ€์ง€ ๋น„์Šทํ•œ ๋ฌธ์ œ๋ฅผ ๋” ํ’€์–ด๋ณด๋„๋ก ํ•˜์ž. 

๋‚œ์ด๋„๊ฐ€ ์‰ฝ๋‹ค๊ณ  ๋Š๊ปด์ง„๋‹ค๋ฉด ์Šคํ‚ตํ•ด๋„ ์ข‹๋‹ค. 

 

https://www.acmicpc.net/problem/5585

 

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

๋ฌธ์ œ ํƒ€๋กœ๋Š” ์ž์ฃผ JOI์žกํ™”์ ์—์„œ ๋ฌผ๊ฑด์„ ์‚ฐ๋‹ค. JOI์žกํ™”์ ์—๋Š” ์ž”๋ˆ์œผ๋กœ 500์—”, 100์—”, 50์—”, 10์—”, 5์—”, 1์—”์ด ์ถฉ๋ถ„ํžˆ ์žˆ๊ณ , ์–ธ์ œ๋‚˜ ๊ฑฐ์Šค๋ฆ„๋ˆ ๊ฐœ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ ๊ฒŒ ์ž”๋ˆ์„ ์ค€๋‹ค. ํƒ€๋กœ๊ฐ€ JOI์žกํ™”์ ์—์„œ ๋ฌผ๊ฑด์„ ์‚ฌ๊ณ  ์นด์šดํ„ฐ์—์„œ 1000์—” ์ง€ํ๋ฅผ ํ•œ์žฅ ๋ƒˆ์„ ๋•Œ, ๋ฐ›์„ ์ž”๋ˆ์— ํฌํ•จ๋œ ์ž”๋ˆ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž…๋ ฅ๋œ ์˜ˆ1์˜ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜ ๊ทธ๋ฆผ์—์„œ ์ฒ˜๋Ÿผ 4๊ฐœ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ์ž…๋ ฅ ์ž…๋ ฅ์€ ํ•œ์ค„๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๊ณ , ํƒ€๋กœ๊ฐ€ ์ง€๋ถˆํ• 

www.acmicpc.net

https://www.acmicpc.net/problem/11399

 

11399๋ฒˆ: ATM

์ฒซ์งธ ์ค„์— ์‚ฌ๋žŒ์˜ ์ˆ˜ N(1 ≤ N ≤ 1,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ ์‚ฌ๋žŒ์ด ๋ˆ์„ ์ธ์ถœํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„ Pi๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

ํ•ด์„ค ํ’€์ด) 2020/02/08 - [์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€ ๋ฌธ์ œํ’€์ด] - [๋ฐฑ์ค€] ๊ทธ๋ฆฌ๋”” - 11399. ATM

 

 

0-1 ๋ฐฐ๋‚ญ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ(Knapsack Problem)

๋ฌธ์ œ : ์–ด๋–ค ๋„๋‘‘์ด ๋ฐฐ๋‚ญ์„ ๋ฉ”๊ณ  ์นจ์ž…ํ–ˆ๋‹ค. ๋„๋‘‘์€ ๋ฌผ๊ฑด์˜ '๋ฌด๊ฒŒ'์™€ '๊ฐ’์–ด์น˜'๋ฅผ ์•Œ๊ณ  ์žˆ๋‹ค. ํ›”์น  ๋ฌผ๊ฑด์˜ ์ด ๋ฌด๊ฒŒ๋Š” ๋ฐฐ๋‚ญ์˜ ์šฉ๋Ÿ‰์„ ์ดˆ๊ณผํ•  ์ˆ˜ ์—†    ๋‹ค. ๋ฐฐ๋‚ญ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๊ฐ’์–ด์น˜๋ฅผ ๊ตฌํ•˜๋ผ.

 

์ž…๋ ฅ :

•๋ณด์„ (item)์˜ ๊ฐœ์ˆ˜: n

•๋ณด์„ ์ง‘ํ•ฉ S = {item1, item2,…, itemn}

•wi = itemi์˜ ๋ฌด๊ฒŒ, pi = itemi์˜ ๊ฐ€์น˜

•W = ๋ฐฐ๋‚ญ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ์ด ๋ฌด๊ฒŒ

๋ชฉํ‘œ: ๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ์ตœ๋Œ€๋กœ ๋ฌผ๊ฑด์„ ๋‹ด๋Š” ๊ฒƒ. 0-1์€ ๋ฌผ๊ฑด์ด ๋ฐฐ๋‚ญ์— ํฌํ•จ๋˜๋Š” ๊ฒƒ๊ณผ  ํฌํ•จ๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

๋ฐฐ๋‚ญ์˜ ๋ฌด๊ฒŒ๋Š” 30kg ์ผ๋•Œ,

 

์‹œ๋„1) ๊ฐ€์žฅ ๋น„์‹ผ ๋ฌผ๊ฑด ์ˆœ์œผ๋กœ ์ฑ„์›Œ๋ณด์ž.

๋ฌผ๊ฑด ๋ฌด๊ฒŒ ๊ฐ’
item1 25kg 10
item2 10kg 9
item3 10kg 9

๋น„์‹ผ ์ˆœ์œผ๋กœ ์ฑ„์›Œ๋ณด๋ฉด 1 = 25kg => 10 ์ด์ง€๋งŒ, ์ตœ์ ์ธ ํ•ด๋‹ต์€ 2+3 = 20kg => 18์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๋‹ค!

 

์‹œ๋„2) ๊ฐ€์žฅ ๊ฐ€๋ฒผ์šด ๋ฌผ๊ฑด๋ถ€ํ„ฐ ์ฑ„์›Œ๋ณด์ž.

๋ฌผ๊ฑด ๋ฌด๊ฒŒ ๊ฐ’
item1 25kg 10
item2 10kg 4
item3 10kg 4

๊ฐ€๋ฒผ์šด ์ˆœ์œผ๋กœ ์ฑ„์šฐ๋ฉด 2+3 = 20kg => 8 ์ด์ง€๋งŒ, ์ตœ์ ์˜ ํ•ด๋‹ต์€ 1 => 25kg = 10 ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฒˆ์—๋„ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๋‹ค!

 

์‹œ๋„3) ๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜(๊ฐ’/๋ฌด๊ฒŒ)๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ๋ฌผ๊ฑด๋ถ€ํ„ฐ ์ฑ„์šด๋‹ค. 

๋ฌผ๊ฑด ๋ฌด๊ฒŒ ๊ฐ’ ๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜
item1 5kg 50 10
item2 10kg 60 6
item3 10kg 149 7

๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜๊ฐ€ ๋†’์€ ๋ฌผ๊ฑด๋ถ€ํ„ฐ ์ฑ„์šฐ๋ฉด 1+3 = 25kg =>190 ์ด์ง€๋งŒ, ์ตœ์ ์˜ ํ•ด๋‹ต์€ 2 + 3 = 30kg => 200์ด๋‹ค. 

์ด๊ฒƒ๋˜ํ•œ ์ตœ์ ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•„๋‹ˆ๋‹ค!

 

๋™์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜์—ฌ ํ‘ผ๋‹ค.

 

n๊ฐœ์˜ ๋ณด์„๋“ค ์ค‘์— ์ตœ์ ์œผ๋กœ ๊ณ ๋ฅธ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ A๋ผ๊ณ  ํ•˜์ž.

1. A๊ฐ€ n๋ฒˆ์งธ ๋ณด์„์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค๋ฉด, A๋Š” n๋ฒˆ์งธ ๋ณด์„์„ ๋บ€ ๋‚˜๋จธ์ง€ n-1๊ฐœ ์ค‘์—์„œ ์ตœ์ ์œผ๋กœ ๊ณ ๋ฅธ ๊ฐ€๊ฒฉ์˜ ํ•ฉ์—๋‹ค๊ฐ€ n๋ฒˆ์งธ ๋ณด์„์˜ ๊ฐ€๊ฒฉ์„ ๋”ํ•œ ๊ฒƒ๊ณผ ๊ฐ™๋‹ค. 

2. A๊ฐ€ n๋ฒˆ์งธ ๋ณด์„์„ ํฌํ•จํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด, A๋Š” n๋ฒˆ์งธ๋ฅผ ๋บ€ ๋‚˜๋จธ์ง€ n-1๊ฐœ ์ค‘์—์„œ ์ตœ์ ์œผ๋กœ ๊ณ ๋ฅธ ๋ถ€๋ถ„์ง‘ํ•ฉ๊ณผ ๊ฐ„๋‹ค. 

 

์ด๋ฅผ ์‹์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  • (V[i][j]๋ฅผ ์ฒ˜์Œ i๋ฒˆ์งธ๊นŒ์ง€์˜ item ๋งŒ์œผ๋กœ ๋ฌด๊ฒŒ j(j <=W)๋ฅผ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ตœ์ ์˜ ์ด์ต์œผ๋กœ ์ •์˜)
  • V[i][j] = max(V[i−1][j], vi+ V[i−1][j−wi]), if j ≥ wi
  •                      V[i−1][j], if j < wi
  • when V[0][j] = 0 and V[i][0] = 0
int GreedyKnapsack_DP(int n, int m) // n:๋ฌผ๊ฑด๊ฐœ์ˆ˜, m:๋ฐฐ๋‚ญ๋ฌด๊ฒŒ
{ 
    int i, w;
 
    for (i = 0; i <= n; i++)
    {
        for (w = 0; w <= m; w++) // V[i]:๊ฐ€๋ฐฉ, W[i]:๋ฌด๊ฒŒ๋ฐฐ์—ด, P[i]:์ด์ต๋ฐฐ์—ด
        {
            if (i == 0 || w == 0)
            {
                 V[i][w] = 0; 
            }
            else if (w > V[i]) // ๋ฌผ๊ฑด์˜ ๋ฌด๊ฒŒ๊ฐ€ ๊ฐ€๋ฐฉ๋ฌด๊ฒŒ๋ณด๋‹ค ํฌ๋ฉด
            {
             	 V[i][w] = V[i - 1][w];
                 
            }
            else
            {
               	 V[i][w] = max(V[i - 1][w], V[i - 1][w - W[i]] + P[i]);
            }
        }
    }
    return K[n][m];
}

 

 

 

 

 

๋ฐฐ๋‚ญ ๋นˆํ‹ˆ์—†์ด ์ฑ„์šฐ๊ธฐ 

๋ฌธ์ œ : ๋ฐฐ๋‚ญ์˜ ์šฉ๋Ÿ‰์„ ๋„˜์ง€ ์•Š์œผ๋ฉด์„œ ๊ฐ€์žฅ ์ตœ๋Œ€์˜ ์ด๋“์„ ์–ป์„ ์ˆ˜ ์žˆ๋„๋ก ๋ฐฐ๋‚ญ์ฑ„์šฐ๊ธฐ

์ž…๋ ฅ : ๋ฐฐ๋‚ญ์˜ ์šฉ๋Ÿ‰ M, ์•„์ดํ…œ์˜ ๊ฐœ์ˆ˜ n, ๊ฐ ์•„์ดํ…œ์˜ ์ด๋“๊ณผ ๋ฌด๊ฒŒ๊ฐ€ ์ €์žฅ๋œ ๋ฐฐ์—ด p[1:n], w[1:n](๋ฌด๊ฒŒ๋‹น ์ด์ต์ด ํฐ ์ˆœ์œผ๋กœ ์ •๋ ฌ p[i]/w[i] >=p[i+1]/w[i+1])

์ถœ๋ ฅ : ๋ฐฐ๋‚ญ์— ๋“ค์–ด๊ฐ€๋Š” ์•„์ดํ…œ ๋ฆฌ์ŠคํŠธ (x[1:n])

 

๋ฐฐ๋‚ญ ๋นˆํ‹ˆ์—†์ด ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ๋Š” 0-1 ๋ฐฐ๋‚ญ ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ์™€ ๋‹ฌ๋ฆฌ item์„ ์ž˜๋ผ์„œ ์ผ๋ถ€๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ๋ฐฐ๋‚ญ ๋นˆํ‹ˆ์—†์ด ์ฑ„์šฐ๊ธฐ ๋ฌธ์ œ๋Š” ์‹œ๋„3์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ญ์ƒ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฌผ๊ฑด ๋ฌด๊ฒŒ ๊ฐ’ ๋ฌด๊ฒŒ๋‹น ๊ฐ€์น˜
item1 5kg 50 10
item2 10kg 60 6
item3 10kg 149 7

1+3+2x(1/2) => 50+140+30 => 220 

void GreedyKnapsack(float M, int n, int p[], int w[], int& x[]){
	for(int i=1; i<=n; i++){
    	x[i] = 0.0; //์ดˆ๊ธฐํ™”
    }
    float U = M;
    for(int i=1; i<=n; i++){
        if(w[i] > U){
              break;
        }
        x[i] = 1.0;
        U -= w[i];
    }
    if(i <= n){
        x[i] = U/w[i];
    }   
}

์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(NlogN)์ด๋‹ค.

 

 

์ด์ œ, ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž.

์ฒซ๋ฒˆ์งธ ๋ฌธ์ œ๋Š”, 0-1 ๋ฐฐ๋‚ญ ์ฑ„์šฐ๊ธฐ์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๊ณ 

๋‘๋ฒˆ์งธ ๋ฌธ์ œ๋Š”, ๋ฐฐ๋‚ญ ๋นˆํ‹ˆ์—†์ด ์ฑ„์šฐ๊ธฐ์— ๊ด€ํ•œ ๋ฌธ์ œ์ด๋‹ค.

 

https://www.acmicpc.net/problem/1202

 

1202๋ฒˆ: ๋ณด์„ ๋„๋‘‘

๋ฌธ์ œ ์„ธ๊ณ„์ ์ธ ๋„๋‘‘ ์ƒ๋•์ด๋Š” ๋ณด์„์ ์„ ํ„ธ๊ธฐ๋กœ ๊ฒฐ์‹ฌํ–ˆ๋‹ค. ์ƒ๋•์ด๊ฐ€ ํ„ธ ๋ณด์„์ ์—๋Š” ๋ณด์„์ด ์ด N๊ฐœ ์žˆ๋‹ค. ๊ฐ ๋ณด์„์€ ๋ฌด๊ฒŒ Mi์™€ ๊ฐ€๊ฒฉ Vi๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ƒ๋•์ด๋Š” ๊ฐ€๋ฐฉ์„ K๊ฐœ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๊ฐ ๊ฐ€๋ฐฉ์— ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฌด๊ฒŒ๋Š” Ci์ด๋‹ค. ๊ฐ€๋ฐฉ์—๋Š” ์ตœ๋Œ€ ํ•œ ๊ฐœ์˜ ๋ณด์„๋งŒ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค. ์ƒ๋•์ด๊ฐ€ ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ณด์„์˜ ์ตœ๋Œ€ ๊ฐ€๊ฒฉ์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, K ≤ 300,000) ๋‹ค์Œ N๊ฐœ ์ค„์—๋Š” ๊ฐ ๋ณด์„์˜

www.acmicpc.net

https://www.acmicpc.net/problem/13575

 

13575๋ฒˆ: ๋ณด์„ ๊ฐ€๊ฒŒ

์ฒซ์งธ ์ค„์— N๊ณผ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ N, K ≤ 1000) ๋‘˜์งธ ์ค„์—๋Š” ai (1 ≤ ai ≤ 1000)๊ฐ€ ์ฃผ์–ด์ง„๋‹ค.

www.acmicpc.net

๋ฌธ์ œ์˜ ํ’€์ด ์ถ”ํ›„ ์—…๋ฐ์ดํŠธ

 

 

 

 

 

 

๋” ๋งŽ์€ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๊ณ  ์‹ถ๋‹ค๋ฉด, ํ•ด๋‹น ๋งํฌ๋กœ ๊ฐ€์„œ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์ž.

๋ณดํ†ต ๋‚˜์˜ ๊ฒฝ์šฐ ์ •๋‹ต๋น„์œจ๋กœ 50%๋‚ด์™ธ์˜ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ, ํ‘œ์˜ ์ •๋‹ต ๋น„์œจ์„ ํด๋ฆญํ•˜๋ฉด ์ •๋ ฌ๋˜์–ด์„œ ๋ณด์ด๋ฏ€๋กœ ์›ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์„ ํƒํ•ด์„œ ํ’€์–ด๋ณด๋ฉด๋œ๋‹ค.

https://www.acmicpc.net/problem/tag/%EA%B7%B8%EB%A6%AC%EB%94%94%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98

 

๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜ - 1 ํŽ˜์ด์ง€

 

www.acmicpc.net

 

๋ฐ˜์‘ํ˜•
Comments