Skip to content

Latest commit

Β 

History

History
74 lines (57 loc) Β· 3.2 KB

Greedy.md

File metadata and controls

74 lines (57 loc) Β· 3.2 KB

그리디 (Greedy)

  • 그리디 μ•Œκ³ λ¦¬μ¦˜μ€ νƒμš• μ•Œκ³ λ¦¬μ¦˜ λ˜λŠ” μš•μ‹¬μŸμ΄ μ•Œκ³ λ¦¬μ¦˜μ΄λΌκ³ λ„ λΆˆλ¦½λ‹ˆλ‹€.
  • 미래λ₯Ό μƒκ°ν•˜μ§€ μ•Šκ³  각 λ‹¨κ³„μ—μ„œ κ°€μž₯ μ΅œμ„ μ˜ 선택을 ν•˜λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.
  • κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ΅œμ’…μ μΈ κ²°κ³Ό λ„μΆœμ— λŒ€ν•œ μ΅œμ ν•΄λ₯Ό 보μž₯ν•΄μ£ΌλŠ” 것은 μ•„λ‹™λ‹ˆλ‹€.

각 λ‹¨κ³„μ—μ„œ κ°€μž₯ μ΅œμ„ μ˜ μ„ νƒμ΄λž€

그리디 μ•Œκ³ λ¦¬μ¦˜μ˜ 각 λ‹¨κ³„μ—μ„œ μ΅œμ„ μ˜ 선택 μ˜ˆμ‹œλ₯Ό λ³΄κ² μŠ΅λ‹ˆλ‹€.

1f

문제) μ‹œμž‘λ…Έλ“œλ‘œλΆ€ν„° μ‹œμž‘ν•˜μ—¬ κ±°μ³κ°€λŠ” λ…Έλ“œ κ°’μ˜ 합이 μ΅œλŒ€μΈ 경우의 결과값을 κ΅¬ν•˜μ‹œμ˜€.

  • 졜적의 해와 κ·Έλ¦¬λ””μ˜ κ²°κ³Ό 값이 λ‹¬λΌμ§€λŠ” κ±Έ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μš°λ¦¬λŠ” κ°€μž₯ 쒋은 κ²°κ³Όκ°€ 'μ‹œμž‘ - 6 - 56'을 κ±°μΉ˜λŠ” κ²½λ‘œκ°€ κ°€μž₯ 큰 수λ₯Ό λ„μΆœν•˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν•˜μ§€λ§Œ 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λ©΄ μ‹œμž‘ λ…Έλ“œμ—μ„œλΆ€ν„° κ°€μž₯ 큰 수인 '20'을 μ„ νƒν•˜κ²Œ λ©λ‹ˆλ‹€.
  • 결둠적으둜 그리디 μ•Œκ³ λ¦¬μ¦˜μ€ 'μ‹œμž‘ - 20 - 17'λ₯Ό κ°€μž₯ μ΅œλŒ€μΈ 경우둜 μ„ νƒν•˜κ²Œ λ©λ‹ˆλ‹€.

이처럼 그리디 μ•Œκ³ λ¦¬μ¦˜μ€ ν˜„μž¬ μƒν™©μ—μ„œ κ°€μž₯ 쒋은 κ²°κ³Όλ₯Ό μ„ νƒν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€.
이런 이유 λ•Œλ¬Έμ— 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” λ¬Έμ œλŠ” κ°„λ‹¨ν•œ 문제둜 λ‚˜μ˜¬ κ°€λŠ₯성이 맀우 ν½λ‹ˆλ‹€.

그리디 μ•Œκ³ λ¦¬μ¦˜μ˜ μ •λ‹Ήμ„±

그리디 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ΅œμ ν•΄λ₯Ό λ„μΆœν•˜κΈ° μœ„ν•΄μ„œλŠ” 두가지 쑰건을 λ§Œμ‘±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

  1. νƒμš•μ  선택 속성 (greedy choice property)
    νƒμš•μ μΈ 선택이 항상 μ•ˆμ „ν•˜λ‹€λŠ” 것이 보μž₯λœλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
    즉, κ·Έλ¦¬λ””ν•œ 선택이 μ–Έμ œλ‚˜ μ΅œμ ν•΄λ₯Ό 보μž₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  2. 졜적 λΆ€λΆ„ ꡬ쑰 (optimal substructure) λΆ€λΆ„ μ΅œμ ν•΄(Local optimum)듀이 λͺ¨μ—¬ 전체 μ΅œμ ν•΄(Global optimum)λ₯Ό ꡬ할 수 μžˆλŠ” κ²½μš°μž…λ‹ˆλ‹€.
    즉, 전체 λ¬Έμ œκ°€ μ—¬λŸ¬λΆ€λΆ„ 문제둜 λΆ„ν• λ˜λ©°, 이 단계 ν•˜λ‚˜ν•˜λ‚˜μ— λŒ€ν•œ μ΅œμ ν•΄κ°€ λ„μΆœλ˜μ–΄μ•Ό ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

πŸ“Œμ˜ˆμ œ (Baekjoon)

λ°±μ€€ - 동전 0

문제

1f

풀이

μž…λ ₯으둜 λ“€μ–΄μ˜¨ 동전듀을 μ‚¬μš©ν•˜μ—¬ K원을 λ§Œλ“œλŠ”λ° ν•„μš”ν•œ 동전 개수의 μ΅œμ†Ÿκ°’μ„ 좜λ ₯ν•˜λŠ” 것이 λͺ©μ μž…λ‹ˆλ‹€.

  1. i >= 2 인 κ²½μš°μ— AiλŠ” Ai-1의 배수이기 λ•Œλ¬Έμ— 그리디 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.
  2. κ°€μž₯ 큰 동전뢀터 μ‹œμž‘ν•΄μ„œ λͺ«μ„ μΉ΄μš΄νŠΈν•΄μ£Όκ³ , λ‚˜λ¨Έμ§€ 동전을 λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ λ°˜λ³΅ν•©λ‹ˆλ‹€.
  3. μ΄λ•Œ Kκ°€ 0이 되면, λ°˜λ³΅λ¬Έμ„ λΉ μ Έλ‚˜μ˜΅λ‹ˆλ‹€.
동전 K λ™μ „μ˜ 수 λ‚˜λ¨Έμ§€
50000 4200 0 4200
10000 4200 0 4200
5000 4200 0 4200
1000 4200 4 200
500 200 0 200
100 200 2 0
50 0 - -
10 - - -
5 - - -
1 - - -

μ½”λ“œ

n, k = map(int, input().split())

money = []
count = 0

for i in range(n):
  m = int(input())
  money.append(m)

for i in reversed(money):
  if i <= k:
    count += k // i
    k = k % i

print(count)