μ½”ν…Œ

[μ΄μ½”ν…Œ] 그리디 μ•Œκ³ λ¦¬μ¦˜ κ°œλ… 및 문제

JongAh 2021. 4. 2. 04:42

πŸ‘€κ·Έλ¦¬λ”” μ•Œκ³ λ¦¬μ¦˜(νƒμš•λ²•)

πŸ”’ ν˜„μž¬ μƒν™©μ—μ„œ μ§€κΈˆ λ‹Ήμž₯ 쒋은 κ²ƒλ§Œ κ³ λ₯΄λŠ” 방법
πŸ”’ 문제λ₯Ό ν’€κΈ° μœ„ν•œ μ΅œμ†Œν•œμ˜ 아이디어λ₯Ό λ– μ˜¬λ¦¬λŠ” λŠ₯λ ₯
πŸ”’ μ •λ‹Ήμ„± 뢄석이 μ€‘μš”
*λ‹¨μˆœνžˆ κ°€μž₯ μ’‹μ•„ λ³΄μ΄λŠ” 것을 λ°˜λ³΅ν•΄λ„ 졜적의 ν•΄λ₯Ό ꡬ할 수 μžˆλŠ”μ§€ κ²€ν† **

기좜 μœ ν˜•

일반적으둜 졜적의 ν•΄λ₯Ό 보μž₯ν•  수 μ—†λŠ” κ²½μš°κ°€ λ§Žλ‹€.

λ•Œλ¬Έμ— μ½”λ”©ν…ŒμŠ€νŠΈμ—μ„œλŠ” 그리디 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ 얻은 ν•΄κ°€ 졜적의 ν•΄κ°€ λ˜λŠ” μƒν™©μ—μ„œ μΆœμ œλœλ‹€.


문제 1 : κ±°μŠ€λ¦„λˆ

κ±°μŠ€λ¦„λˆμœΌλ‘œ 500, 100, 50, 10μ›μ§œλ¦¬ λ™μ „μœΌλ‘œ N원을 거슬러 μ£Όμ–΄μ•Ό ν•  λ•Œ λ™μ „μ˜ μ΅œμ†Œ 개수λ₯Ό κ΅¬ν•˜μ‹œμ˜€.
*동전은 λ¬΄ν•œνžˆ μ‘΄μž¬ν•œλ‹€.
*N은 10의 λ°°μˆ˜μ΄λ‹€.

아이디어

κ°€μž₯ 큰 ν™”νλ‹¨μœ„ λΆ€ν„° λˆμ„ 거슬러 μ€€λ‹€.

μ •λ‹Ήμ„±

κ°€μž₯ 큰 ν™”νλ‹¨μœ„λΆ€ν„° 거슬러 μ£ΌλŠ” 것이 졜적의 ν•΄λ₯Ό 보μž₯ν•˜λŠ” μ΄μœ λŠ”?

큰 λ‹¨μœ„μ˜ 화폐가 항상 μž‘μ€ λ‹¨μœ„μ˜ 배수 μ΄λ―€λ‘œ μž‘μ€ λ‹¨μœ„λ‘œ λ‹€λ₯Έ ν•΄λ₯Ό ꡬ할 수 μ—†λ‹€.

*그리디 μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” 문제 풀이λ₯Ό μœ„ν•œ μ΅œμ†Œν•œμ˜ 아이디어λ₯Ό λ– μ˜¬λ¦¬κ³  μ •λ‹Ήν•œμ§€ κ²€ν†  ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

λ‹΅

개인 풀이

참고둜 이건 κ½€ 재미있게 μ ‘κ·Όν–ˆλ‹€κ³  생각 ν–ˆμ§€λ§Œ μ˜€λ‹΅μ΄λ‹€.

*μ™œ μ˜€λ‹΅μΈμ§€ μ°Ύμ•„λ³΄λŠ” 것도 μž¬λ―Έμžˆμ„ 것이닀.

μ‹œκ°„ λ³΅μž‘λ„

ν™”νμ˜ μ’…λ₯˜κ°€ k라고 ν• λ•Œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(k) 이닀.

*ν™”νμ˜ μ’…λ₯˜μ—λ§Œ 영ν–₯을 λ°›λŠ”λ‹€.


문제 2 : 1이 될 λ•ŒκΉŒμ§€

N이 1이 λ λ•ŒκΉŒμ§€
1. Nμ—μ„œ 1을 λΊ€λ‹€
2. Nμ—μ„œ Kλ₯Ό λ‚˜λˆˆλ‹€..
1 번 ν˜Ήμ€ 2λ²ˆμ„ λ°˜λ³΅ν• λ•Œ μ΅œμ†Œ 횟수λ₯Ό κ΅¬ν•˜μ‹œμ˜€.

아이디어

N에 λŒ€ν•˜μ—¬ μ΅œλŒ€ν•œ 많이 λ‚˜λˆ„κΈ°λ₯Ό μˆ˜ν–‰ν•œλ‹€.

*2μ΄μƒμ˜ 수둜 λ‚˜λˆ„λŠ” μž‘μ—…μ΄ 1을 λΉΌλŠ” 것보닀 횟수λ₯Ό 효과적으둜 쀄일 수 μžˆλ‹€.

μ •λ‹Ήμ„±

μ΅œλŒ€ν•œ 많이 λ‚˜λˆ„λŠ” 것이 졜적의 ν•΄λ₯Ό 보μž₯ν•˜λŠ”κ°€?

Kκ°€ 2 이상일 λ•Œ 1을 λΉΌλŠ” 것보닀 λΉ λ₯΄κ²Œ N의 크기λ₯Ό 쀄일 수 있으며 N은 항상 1에 λ„λ‹¬ν•œλ‹€.

λ‹΅

개인 풀이

μ‹œκ°„ λ³΅μž‘λ„

ν•œλ²ˆμ— λΊ„μ…ˆκ³Ό λ‚˜λˆ—μ…ˆμ„ μ‹€ν–‰ν•˜λ―€λ‘œ λ‘œκ·Έμ‹œκ°„ λ³΅μž‘λ„λ‘œ 계산할 수 μžˆλ‹€.


문제 3 : κ³±ν•˜κΈ° ν˜Ήμ€ λ”ν•˜κΈ°

아이디어

μˆ«μžκ°€ 2 이상일 경우 κ³±μ…ˆμ„ ν•œλ‹€.

μ •λ‹Ήμ„±

μˆ«μžκ°€ 0 ν˜Ήμ€ 1이 μ•„λ‹Œμ΄μƒ + 보닀 *이 값을 더 크게 λ§Œλ“ λ‹€.

λ‹΅

개인 풀이


문제 4 : λͺ¨ν—˜κ°€ κΈΈλ“œ

λͺ¨ν—˜κ°€κ°€ Nλͺ…이닀.
그룹을 생성할 λ•Œ 곡포도가 X인 λͺ¨ν—˜κ°€λŠ” λ°˜λ“œμ‹œ Xλͺ… μ΄μƒμœΌλ‘œ κ΅¬μ„±ν•œ λͺ¨ν—˜κ°€ 그룹에 μ°Έμ—¬ν•΄μ•Ό ν•œλ‹€.
여행을 λ– λ‚  수 μžˆλŠ” 그룹수의 μ΅œλŒ“κ°’μ„ ꡬ해라.
λͺ¨λ“  λͺ¨ν—˜κ°€λ₯Ό 그룹에 넣을 ν•„μš”λŠ” μ—†λ‹€.

아이디어

μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ λͺ¨ν—˜κ°€ 배열을 μ•žμ—μ„œ λΆ€ν„° 그룹에 ν¬ν•¨λœ λͺ¨ν—˜κ°€μ˜ μˆ˜κ°€ 곡포도 보닀 ν¬κ±°λ‚˜ κ°™λ‹€λ©΄ 그룹으둜 μ„€μ •ν•œλ‹€.

 

μ •λ‹Ήμ„±

곡포도가 μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬λ˜μ–΄ 있기 λ•Œλ¬Έμ— 항상 μ΅œμ†Œν•œμ˜ λͺ¨ν—˜κ°€λ§Œ ν¬ν•¨ν•˜μ—¬ 그룹을 κ²°μ„±ν•˜κ²Œ λœλ‹€.

λ‹΅