Problem Solving/BOJ & Programmers

[BOJ] 2217번: λ‘œν”„

geum 2024. 2. 25. 14:41

문제

N(1 ≤ N ≤ 100,000)개의 λ‘œν”„κ°€ μžˆλ‹€. 이 λ‘œν”„λ₯Ό μ΄μš©ν•˜μ—¬ 이런 μ €λŸ° 물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλ‹€. 각각의 λ‘œν”„λŠ” κ·Έ κ΅΅κΈ°λ‚˜ 길이가 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— λ“€ 수 μžˆλŠ” 물체의 μ€‘λŸ‰μ΄ μ„œλ‘œ λ‹€λ₯Ό μˆ˜λ„ μžˆλ‹€.

ν•˜μ§€λ§Œ μ—¬λŸ¬ 개의 λ‘œν”„λ₯Ό λ³‘λ ¬λ‘œ μ—°κ²°ν•˜λ©΄ 각각의 λ‘œν”„μ— κ±Έλ¦¬λŠ” μ€‘λŸ‰μ„ λ‚˜λˆŒ 수 μžˆλ‹€. k개의 λ‘œν”„λ₯Ό μ‚¬μš©ν•˜μ—¬ μ€‘λŸ‰μ΄ w인 물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ λ•Œ, 각각의 λ‘œν”„μ—λŠ” λͺ¨λ‘ κ³ λ₯΄κ²Œ w/k 만큼의 μ€‘λŸ‰μ΄ 걸리게 λœλ‹€.

각 λ‘œν”„λ“€μ— λŒ€ν•œ 정보가 μ£Όμ–΄μ‘Œμ„ λ•Œ, 이 λ‘œν”„λ“€μ„ μ΄μš©ν•˜μ—¬ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 물체의 μ΅œλŒ€ μ€‘λŸ‰μ„ κ΅¬ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λͺ¨λ“  λ‘œν”„λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  ν•„μš”λŠ” μ—†μœΌλ©°, μž„μ˜λ‘œ λͺ‡ 개의 λ‘œν”„λ₯Ό κ³¨λΌμ„œ μ‚¬μš©ν•΄λ„ λœλ‹€.

 

μž…μΆœλ ₯ μ˜ˆμ‹œ

 

풀이

ν’€κ³  λ‚˜μ„œ λ°”λ‘œ μ •λ¦¬ν–ˆμ–΄μ•Ό ν•˜λŠ”λ° μ‹œκ°„μ΄ μ’€ μ§€λ‚˜μ„œ κ·Έ λ‹Ήμ‹œ μ΄ν•΄ν–ˆλ˜ κ±Έ μ œλŒ€λ‘œ 적을 수 μžˆμ„μ§€ λͺ¨λ₯΄κ² λ‹€. 일단 문제 이해에 도움을 쀬던 연ꡬ싀 μΉœκ΅¬λ“€μ—κ²Œ λ¬΄ν•œν•œ 감사λ₯Ό!

 

아이디어 ☝

일단 λ‚΄κ°€ μ²˜μŒμ— μƒκ°ν–ˆλ˜ 건 '버틸 수 μžˆλŠ” μ€‘λŸ‰μ΄ κ°€μž₯ 적은 λ‘œν”„λ₯Ό κΈ°μ€€μœΌλ‘œ μ‚Όμ•„μ„œ κ·Έ λ‘œν”„λ₯Ό k개 μ“°λŠ” 것'μ΄μ—ˆλ‹€. κ·Έλž˜μ„œ μ½”λ“œλ‘œλ„ min(ropes)*Kκ°€ λμ΄μ—ˆλŠ”λ° 4%μ—μ„œ ν‹€λ Έλ‹€. μΉœκ΅¬λž‘ 같이 κ³ λ―Όν•˜κ³  μžˆμ—ˆλŠ”λ° μΉœκ΅¬κ°€ μ°Ύμ•„μ€€ λ°˜λ‘€λŠ” 'K=3, 5 10 20'이 μž…λ ₯으둜 λ“€μ–΄μ˜€λŠ” κ²½μš°μ˜€λ‹€.

 

μ €λ ‡κ²Œ μž…λ ₯이 λ“€μ–΄μ˜€λ©΄ 20을 버틸 수 μžˆλŠ” λ‘œν”„ ν•œ 개만 μ“°λŠ” κ²½μš°κ°€ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 물체의 μ΅œλŒ€ μ€‘λŸ‰μ΄κΈ° λ•Œλ¬Έμ— 닡이 20이 λ˜μ–΄μ•Ό ν•œλ‹€. ν•˜μ§€λ§Œ? λ‚΄ λ°©μ‹λŒ€λ‘œλΌλ©΄ 15κ°€ μ΅œλŒ€λΌμ„œ λ°”λ‘œ μ˜€λ‹΅μ΄ λ˜μ–΄ λ²„λ¦¬λŠ” 것!

 

κ·Έλž˜μ„œ 첫 λ°©μ‹μ—μ„œ 'Kλ₯Ό κ³±ν•΄μ€˜λ²„λ¦¬λ©΄ 무쑰건 λͺ¨λ“  λ‘œν”„λ₯Ό μ“°λŠ” κ²½μš°κ°€ 되기 λ•Œλ¬Έμ— λͺ¨λ“  λ‘œν”„λ₯Ό 쓰지 μ•Šκ³ λ„ μ΅œλŒ€ μ€‘λŸ‰μ„ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 경우λ₯Ό μƒκ°ν•˜μ§€ λͺ»ν•˜λ―€λ‘œ 이 방법은 ν—ˆμ μ΄ μžˆλ‹€'λŠ” 결둠을 λ‚΄λ Έλ‹€.

 

아이디어 ✌

'물체λ₯Ό λ“€μ–΄μ˜¬λ¦΄ λ•Œ κ°€μž₯ μ•½ν•œ λ‘œν”„μ˜ ν•œκ³„λ₯Ό μ΄ˆκ³Όν•˜μ§€ μ•ŠμœΌλ©΄μ„œ μ΅œλŒ€ν•œ λ§Žμ€ μ€‘λŸ‰μ„ λ“€μ–΄μ˜¬λ¦΄ 수 있게 ν•˜λŠ” 것'이 핡심이라고 ν•  수 μžˆλ‹€.

 

μœ„μ˜ 과정을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄ 버틸 수 μžˆλŠ” μ€‘λŸ‰μ΄ 무거운 순으둜 μ •λ ¬ν•˜κ³  μ •λ ¬λœ λ‘œν”„λ“€μ„ μˆœνšŒν•˜λ©΄μ„œ 각 λ‘œν”„λ₯Ό ν¬ν•¨ν•˜μ—¬ κ·Έ μ΄ν•˜μ˜ λ‘œν”„λ“€λ§Œ μ‚¬μš©ν–ˆμ„ λ•Œ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ„ 계산해쀀닀.

 

5, 10, 20이 μž…λ ₯으둜 λ“€μ–΄μ™”λ‹€μΉ˜κ³  정리λ₯Ό ν•΄λ³΄μž.

 

1) λ°°μ—΄ μ •λ ¬ → ropes = [20, 10, 5]

2) λ‘œν”„ 1개 → 20짜리 ν•˜λ‚˜λ§Œ μ“°λ©΄ 되기 λ•Œλ¬Έμ— 20이 μ΅œλŒ€ → ropes[0]*1

3) λ‘œν”„ 2개 → 20짜리 ν•˜λ‚˜, 10짜리 ν•˜λ‚˜λ₯Ό μ“°λ˜ 버틸 수 μžˆλŠ” μ€‘λŸ‰μ΄ κ°€μž₯ 적은 10이 기쀀이라 20이 μ΅œλŒ€ → ropes[1]*2

4) λ‘œν”„ 3개 → 20짜리 ν•˜λ‚˜, 10짜리 ν•˜λ‚˜, 5짜리 ν•˜λ‚˜λ₯Ό μ“°λ˜ 5κ°€ 기쀀이라 15κ°€ μ΅œλŒ€ → ropes[2]*3

 

 

μ € λ‚΄μš©μ„ κ·ΈλŒ€λ‘œ κ΅¬ν˜„ν•˜λŠ” 건 어렡지 μ•ŠκΈ° λ•Œλ¬Έμ— μ½”λ“œ μ‚½μž…μ€ μƒλž΅ν•œλ‹€. 근데 λ­”κ°€ 해석이 κΉ”λ”ν•˜μ§€ μ•Šμ€ λŠλ‚Œμ΄λΌ 찝찝 😐

'Problem Solving > BOJ & Programmers' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[BOJ] 11399번: ATM  (0) 2024.08.27
[BOJ] 2839번: 섀탕 배달  (1) 2024.08.27
[BOJ] 14501번: 퇴사  (1) 2024.02.05
[BOJ] 2960번: RESETO  (0) 2024.01.18
[BOJ] 15686번: μΉ˜ν‚¨ 배달  (0) 2024.01.16