๋”ฐํŒŒ๐Ÿ•
Hwaiian Pizza IT Pub
๋”ฐํŒŒ๐Ÿ•
  • ALL (62)
    • Front-End (13)
      • HTML & CSS (2)
      • JavaScript (7)
      • React (2)
      • TypeScript (0)
      • Jquery (0)
      • Git (1)
      • Editor (0)
    • Algorithms (44)
      • Baekjoon (28)
      • Programmers (13)
      • Algorithms (3)
    • Computer Science (0)
      • Math (0)
    • Conference (1)
    • Life (3)
      • Book (0)
hELLO ยท Designed By ์ •์ƒ์šฐ.
๋”ฐํŒŒ๐Ÿ•

Hwaiian Pizza IT Pub

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํƒ์š•(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜
Algorithms/Algorithms

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํƒ์š•(Greedy) ์•Œ๊ณ ๋ฆฌ์ฆ˜

2022. 5. 21. 08:00
๋ฐ˜์‘ํ˜•

 

 

 

1. ํƒ์š• ์•Œ๊ณ ๋ฆฌ์ฆ˜ (Greedy Algorithms)


 

ํƒ์š•(Greedy)์€ ๋ง ๊ทธ๋Œ€๋กœ ์ง€๋‚˜์น˜๊ฒŒ ์š•์‹ฌ์ด ๋งŽ๋‹ค๋Š” ๋œป์ด๋‹ค.

 

 

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌด์—‡์ผ๊นŒ?

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

 

๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ์‚ฌ์šฉ ์‹œ ๋งŽ์€ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์ณ ์‚ฌ์šฉ๋ผ ๋น„ํšจ์œจ์ ์ด๋‹ค.

(๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋ชจ๋‘ ๊ฒ€ํ† ํ•ด ์ ํ™”์‹์„ ํ†ตํ•ด ๊ตฌ์„ฑ)

 

๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋Œ€์ฒดํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ๋™์ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ™์ด ์ƒํ™ฉ์— ๋งž๊ฒŒ ์“ฐ์ด๋Š” ๊ฒƒ์ด ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

 

 

 

 

2. ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋ฆฝ ์กฐ๊ฑด


 

  • ํƒ์š•์  ์„ ํƒ ์†์„ฑ(Greedy Choice Property) : ํƒ์š•์  ์„ ํƒ์ด ์ „์ฒด ๋ฌธ์ œ์˜ ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค , ์•ž์˜ ์„ ํƒ์ด ๋‹ค์Œ ์„ ํƒ์˜ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ(Optimal Substructure) : ๋ฌธ์ œ์— ์ตœ์ข… ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ๋ถ€๋ถ„ ๋ฌธ์ œ์—๋„ ์ตœ์ ์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด๋‹ค.

 

 

์œ„ ์กฐ๊ฑด์ด ์„ฑ๋ฆฝ๋˜์ง€ ์•Š์œผ๋ฉด ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์—†๋‹ค.

 

โžก๏ธ ๊ทผ์‹œ์•ˆ์ ์œผ๋กœ ํŒ๋‹จํ•˜๊ณ  ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด์ ์œผ๋กœ ์ตœ์ ์˜ ํ•ด๋ฅผ ๊ตฌํ•œ๋‹ค๊ณ  ๋ณด์žฅ๋˜์ง€ ์•Š๋Š”๋‹ค.

โžก๏ธ ๋Œ€์‹  ๊ทผ์‚ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด ์‹ค์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

โžก๏ธ ํ•ญ์ƒ ์ตœ์ ์˜ ํ•ด๋Š” ์•„๋‹ˆ์ง€๋งŒ ๊ณ„์‚ฐ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.

 

 

 

 

 

 

3. ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ตœ์ ์ด ๋  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ


 

1) ๋งˆ์‹œ๋ฉœ๋กœ์šฐ ์ด์•ผ๊ธฐ

1๋ถ„์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋งˆ์‹œ๋ฉœ๋กœ์šฐ 1๊ฐœ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

2๋ถ„์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋งˆ์‹œ๋ฉœ๋กœ์šฐ 4๊ฐœ๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ํƒ ์‹œ : ํ˜„์žฌ์—์„œ ๊ฐ€์žฅ ์ตœ์„ ์˜ ์„ ํƒ์„ ํ•˜๋ฏ€๋กœ 1๋ถ„์„ ๊ธฐ๋‹ค๋ ค ๋งˆ์‹œ๋ฉœ๋กœ์šฐ 1๊ฐœ๋งŒ ๋ฐ›๋Š”๋‹ค.

์ „์ฒด์ ์œผ๋กœ ๋ดค์„ ๋•Œ ์ตœ์ ์˜ ์„ ํƒ์„ ํ•œ๋‹ค๋ฉด 1๋ถ„์„ ๋” ๊ธฐ๋‹ค๋ ค ๋งˆ์‹œ๋ฉœ๋กœ์šฐ๋ฅผ 4๊ฐœ ๋ฐ›๋Š” ๊ฒƒ์ด ๋” ์ด๋“์ด๋‹ค.

 

 

 

 

 

2) ๋„๋‘‘ ์ด์•ผ๊ธฐ

 

๋‚˜๋Š” ๋„๋‘‘์ด๋‹ค.

์˜†์ง‘ ๊ฐ•๋ถ€์ž๋„ค ์ง‘์— ๋“ค์–ด๊ฐ€ ๋ฌผ๊ฑด์„ ๋‹ด์•„ ํ›”์น˜๋ ค๊ณ  ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ๋‚ด ๊ฐ€๋ฐฉ์€ 35kg๊นŒ์ง€ ๋ฐ–์— ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

๊ฐ•๋ถ€์ž๋„ค ์ง‘์—์„œ ๋ฌด์—‡์„ ํ›”์ณ์•ผ ํ• ๊นŒ?

 

 

๊ฐ•๋ถ€์ž๋„ค ์ง‘ ๋ฌผ๊ฑด๋“ค

๐Ÿฅ ๋“œ๋Ÿผ 30kg $1,500
๐Ÿ† ๊ธˆ๋ฐ˜์ง€ 15kg $2,000
๐Ÿ“บ ํ‹ฐ๋น„ 10kg $2,000
๐ŸŽน ํ”ผ์•„๋…ธ 30kg $3,000

 

ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฌผ๊ฑด์„ ํ›”์น  ๋•Œ

  1. ๊ฐ€๋ฐฉ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋น„์‹ผ ๋ฌผ๊ฑด์„ ๋„ฃ๋Š”๋‹ค.
  2. ๊ทธ๋‹ค์Œ์œผ๋กœ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด ์ค‘ ๊ฐ€์žฅ ๋น„์‹ผ ๋ฌผ๊ฑด์„ ๋„ฃ๋Š”๋‹ค.

 

 

๊ฐ€์žฅ ๋น„์‹ผ ๋ฌผ๊ฑด์ธ ํ”ผ์•„๋…ธ๋ฅผ ๊ฐ€๋ฐฉ์— ๋„ฃ์œผ๋ฉด

5kg๋ฐ–์— ๋‚จ์ง€ ์•Š์•„ ๋” ๋ฌผ๊ฑด์„ ๋‹ด์„ ์ˆ˜ ์—†๋‹ค.

๋”ฐ๋ผ์„œ ํ›”์น  ์ˆ˜ ์žˆ๋Š” ๋ฌผ๊ฑด์˜ ๊ฐ€์น˜๋Š” $3,000์ด๋‹ค.

 

 

 

ํ•˜์ง€๋งŒ ํ”ผ์•„๋…ธ ๋Œ€์‹  ํ‹ฐ๋น„์™€ ๊ธˆ๋ฐ˜์ง€๋ฅผ ๋„ฃ์—ˆ๋‹ค๋ฉด?

์ด $4,000 ๊ฐ€์น˜์˜ ๋ฌผ๊ฑด์„ ํ›”์น  ์ˆ˜ ์žˆ๋‹ค.

์œ„์— ์„ค๋ช…ํ•œ ๊ฑฐ์ฒ˜๋Ÿผ ๊ทผ์‹œ์•ˆ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํŒ๋‹จํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—

ํ•ญ์ƒ ์ตœ์ ์˜ ํ•ด๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

 

 

3. ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ตœ์ ์ด ๋˜๋Š” ๊ฒฝ์šฐ


 

 

๋ฐฑ์ค€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ 11047๋ฒˆ : ๋™์ „ 0

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

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

 

 

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

 

์œ„ ๋ฌธ์ œ๋Š” ํƒ์š•์  ์„ ํƒ์†์„ฑ๊ณผ ์ตœ์  ๋ถ€๋ถ„ ๊ตฌ์กฐ๊ฐ€ ์„ฑ๋ฆฝ๋˜๋ฏ€๋กœ ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด ์ตœ์ ํ•ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.โ€‹

ํ˜„์žฌ์˜ ์„ ํƒ์ด ๋‹ค์Œ ์„ ํƒ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ  ์ „์ฒด ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ๋ถ€๋ถ„ ๋ฌธ์ œ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•์ด ๋œ๋‹ค.

๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ ๊ฐ€์žฅ ๊ฐ€์น˜๊ฐ€ ๋†’์€ ๋™์ „์„ ์„ ํƒํ•˜๊ณ  ์ดํ›„์— ํ•œ ๋‹จ๊ณ„ ์•„๋ž˜ ์žˆ๋Š” ๋™์ „๋“ค๋กœ ๋‚จ์€ ๊ฐ’์„ ์ฑ„์›Œ๋‚˜๊ฐ„๋‹ค.

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์˜ˆ์‹œ์ฝ”๋“œ

const input = require('fs').readFileSync('dev/stdin').toString().trim().split('\n');
let arr1 = input.shift().split(' ');

// ์ค€๊ทœ๊ฐ€ ๊ฐ€์ง„ ๋™์ „์˜ ์ด ๊ฐœ์ˆ˜
let length = arr1[0];

// ๊ฐ€์น˜์˜ ํ•ฉ
let k = arr1[1];

// ๋™์ „์ด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋“ค์–ด์žˆ๋Š” ๋ฐฐ์—ด
let coins =  input.map(Number)

// ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ด๊ธฐ์œ„ํ•œ ๋ณ€์ˆ˜ count
let count = 0;

// ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
// ๊ฐ€์น˜๊ฐ€ ๊ฐ€์žฅ ํฐ (๊ฐ’์ด ์ œ์ผ ํฐ) ๋™์ „์œผ๋กœ k๋ฅผ ์ฑ„์šฐ๊ณ  ๋‚จ์€ ๊ฐ’์€
// ๊ทธ ์•„๋ž˜๋กœ ๊ฐ€์น˜๊ฐ€ ํฐ(๊ฐ’์ด ํฐ) ๋™์ „๋“ค๋กœ ์ฑ„์›Œ๊ฐ„๋‹ค
for (let i = length ; i >= 0 ; i --) {
	// ๋™์ „ ์‚ฌ์šฉ์˜ ์ ์ ˆ์„ฑ ๊ฒ€์‚ฌ
    if (coins[i] <= k) {
    	// ๋™์ „์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ชซ์œผ๋กœ ๊ณ„์‚ฐํ•ด ์†Œ์ˆ˜์ ์„ ๋ฒ„๋ฆฌ๊ณ  count์— ๋”ํ•จ
        count += Math.floor(k / coins[i]);
        // ๋‚˜๋จธ์ง€ ๊ฐ’์„ k์— ์ €์žฅ
        k = k % coins[i];
    }
}

console.log(count);

 

 

 

 

์ •๋ฆฌ

๐Ÿ‘ ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฏธ๋ž˜๋ฅผ ์ƒ๊ฐํ•˜์ง€ ์•Š๊ณ  ํ˜„์žฌ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ตœ์ ์˜ ๋‹ต์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๐Ÿ‘ ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทผ์‚ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์“ฐ์ผ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•ญ์ƒ ์ตœ์ ์˜ ๋‹ต์€ ์•„๋‹ˆ์ง€๋งŒ ์†๋„๋Š” ๋น ๋ฅด๋‹ค.

 

 

 

 

 

Refernce(์ฐธ์กฐ)

 

 

https://www.zerocho.com/category/Algorithm/post/584ba5c9580277001862f188

https://hevton.tistory.com/364

https://hanamon.kr/์•Œ๊ณ ๋ฆฌ์ฆ˜-ํƒ์š•์•Œ๊ณ ๋ฆฌ์ฆ˜-greedy-algorithm/

https://velog.io/@shitaikoto/Algorithm-GreedyAlgorithm-DynamicProgramming

 

 

 

๋ฐ˜์‘ํ˜•
์ €์ž‘์žํ‘œ์‹œ ๋น„์˜๋ฆฌ ๋ณ€๊ฒฝ๊ธˆ์ง€ (์ƒˆ์ฐฝ์—ด๋ฆผ)

'Algorithms > Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ์™„์ „ ํƒ์ƒ‰ (๋ธŒ๋ฃจํŠธ ํฌ์Šค Brute Force)  (0) 2022.05.25
[์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํ•˜๋…ธ์ดํƒ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜  (0) 2022.05.18
    'Algorithms/Algorithms' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ์™„์ „ ํƒ์ƒ‰ (๋ธŒ๋ฃจํŠธ ํฌ์Šค Brute Force)
    • [์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ธฐ๋ณธ] ํ•˜๋…ธ์ดํƒ‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋”ฐํŒŒ๐Ÿ•
    ๋”ฐํŒŒ๐Ÿ•
    ์ €์ชฝ ์†๋‹˜์ด ๋ณด๋‚ด์‹  ์—๋Ÿฌ์ž…๋‹ˆ๋‹ค. ๋””๋ฒ„๊น… ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?๐Ÿน

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”