[BOJ] 2217번 | λ‘œν”„ (Python3)

2022. 7. 14. 15:29ㆍCoding Test/BOJ

πŸ”—λ¬Έμ œ λ³΄λŸ¬κ°€κΈ°
 

2217번: λ‘œν”„

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

www.acmicpc.net

 

 

문제 μ„€λͺ…

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

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

각 λ‘œν”„듀에 λŒ€ν•œ μ •λ³΄κ°€ μ£Όμ–΄μ‘Œμ„ λ•Œ, μ΄ λ‘œν”„듀을 μ΄μš©ν•˜μ—¬ λ“€μ–΄μ˜¬λ¦΄ μˆ˜ μžˆλŠ” λ¬Όμ²΄μ˜ μ΅œλŒ€ μ€‘λŸ‰μ„ κ΅¬ν•΄λ‚΄λŠ” ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜μ‹œμ˜€. λͺ¨λ“  λ‘œν”„λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  ν•„μš”λŠ” μ—†μœΌλ©°, μž„μ˜λ‘œ λͺ‡ κ°œμ˜ λ‘œν”„λ₯Ό κ³¨λΌμ„œ μ‚¬μš©ν•΄λ„ λœλ‹€.

 


μž…λ ₯

첫째 μ€„에 μ •μˆ˜ N이 μ£Όμ–΄μ§„λ‹€. λ‹€μŒ N개의 μ€„μ—λŠ” κ° λ‘œν”„κ°€ λ²„ν‹Έ μˆ˜ μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ΄ μ£Όμ–΄μ§„λ‹€. μ΄ κ°’은 10,000을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€.

 


좜λ ₯

첫째 μ€„에 λ‹΅μ„ μΆœλ ₯ν•œλ‹€.

 


예제 μž…μΆœλ ₯

 


풀이 μ „λž΅

ν•œ 개의 λ‘œν”„κ°€ λ‹€λ₯Έ λ‘œν”„λ“€λ³΄λ‹€ μ••λ„μ μœΌλ‘œ 많이 λ“€ 수 μžˆλ‹€λ©΄ λ³‘λ ¬ ꡬ쑰가 더 λΉ„νš¨μœ¨μ μΌ κ²λ‹ˆλ‹€.

λ³‘λ ¬λ‘œ μ—°κ²°ν•˜μ—¬ λ“€μ—ˆμ„ λ•ŒλŠ” μ œμΌ 적게 λ“€ 수 μžˆλŠ” λ‘œν”„ X λ‘œν”„ κ°œμˆ˜κ°€ λ“€μ–΄μ˜¬λ¦΄ 수 μžˆλŠ” 물체의 μ΅œλŒ€ μ€‘λŸ‰μ΄κ² μ£ .

즉, λ‘œν”„ 개수λ₯Ό 쀄여가며 κ°€μž₯ 많이 λ“€ 수 μžˆλŠ” μ€‘λŸ‰μ΄ λͺ‡μΈμ§€λ₯Ό μ°Ύμ•„λ‚΄λ©΄ λ©λ‹ˆλ‹€.

  • λ‘œν”„κ°€ λ“€ 수 μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ„ κΈ°μ€€μœΌλ‘œ μ˜€λ¦„μ°¨μˆœ μ •λ ¬ν•œλ‹€.
  • λ‘œν”„ 개수λ₯Ό 쀄여가며 κ°€μž₯ 많이 λ“€ 수 μžˆλŠ” μ΅œλŒ€ μ€‘λŸ‰μ„ μ°ΎλŠ”λ‹€.

μ‹œλ‚˜λ¦¬μ˜€

  • λ‹€μŒκ³Ό 같이 μ˜€λ¦„μ°¨μˆœ μ •λ ¬λœ λ‘œν”„ 4κ°œκ°€ μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

λ‚˜λ¦„ λ‘œν”„ 같이 생겼죠?...

  • λ‘œν”„ 4개λ₯Ό λ‹€ μ‚¬μš©ν•˜μ—¬ λ“€μ—ˆμ„ λ•Œ μ΅œλŒ€λ‘œ λ“€ 수 μžˆλŠ” λ¬΄κ²ŒλŠ” 15 X 4 = 60 μž…λ‹ˆλ‹€. 

이제 λ³΄λ‹ˆ κ³±μ°½κ°™λ„€μš”.

  • λ‘œν”„ 3개λ₯Ό μ‚¬μš©ν•˜μ—¬ λ“€μ—ˆμ„ λ•Œ μ΅œλŒ€λ‘œ λ“€ 수 μžˆλŠ” λ¬΄κ²ŒλŠ” 30 X 3 = 90 μž…λ‹ˆλ‹€.

  • λ‘œν”„ 2개λ₯Ό μ‚¬μš©ν•˜μ—¬ μ΅œλŒ€λ‘œ λ“€ 수 μžˆλŠ” λ¬΄κ²ŒλŠ” 38 X 2 = 76 μ΄μ£ .

  • λ§ˆμ§€λ§‰μœΌλ‘œ ν•œ 개만 μ‚¬μš©ν–ˆμ„ λ•Œ μ΅œλŒ€λ‘œ λ“€ 수 μžˆλŠ” λ¬΄κ²ŒλŠ” 46μž…λ‹ˆλ‹€.

 

λ”°λΌμ„œ κ°€μž₯ 많이 λ“€ 수 μžˆλŠ” λ¬΄κ²ŒλŠ” λ‘œν”„ 3개λ₯Ό μ‚¬μš©ν–ˆμ„ λ•ŒμΈ 90 μ΄λΌλŠ” 것을 ꡬ할 수 μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

 


μ†ŒμŠ€ μ½”λ“œ 및 κ²°κ³Ό

n = int(input())
ropes = []

for _ in range(n):
    ropes.append(int(input()))

ropes.sort()
totalRopeCount = len(ropes)
maxWeight = ropes[0] * totalRopeCount

for i in range(1, n):
    usingRopeCount = totalRopeCount - i
    weight = ropes[i] * usingRopeCount
    
    if maxWeight < weight:
        maxWeight = weight

print(maxWeight)

 

728x90
λ°˜μ‘ν˜•