λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸƒ algorithm/boj

BOJ 17521 - Byte Coin

by HandHand 2021. 3. 14.

문제

λ°±μ€€ 온라인 저지 - 17521번

풀이 κ³Όμ •

λ°”μ΄νŠΈ 코인 의 μ‹œμ„Έκ°€ μ£Όμ–΄μ§ˆ λ•Œ 맀수 및 맀도λ₯Ό 톡해 얻을 수 μžˆλŠ” μ΅œλŒ€ 이읡을 κ³„μ‚°ν•˜λŠ” λ¬Έμ œμž…λ‹ˆλ‹€.

맀수 및 맀도 νšŸμˆ˜μ— μ œν•œμ΄ μ—†κΈ° λ•Œλ¬Έμ— κ·Έλž˜ν”„μ˜ κ·ΉλŒ€ 및 κ·Ήμ†Œ μ§€μ μ—μ„œ 맀도 및 맀수λ₯Ό μ§„ν–‰ν•˜λŠ” 그리디 해법이 μ μš©λ©λ‹ˆλ‹€.
각각의 μˆœνšŒμ—μ„œ 이전 가격과 λΉ„κ΅ν•˜μ—¬ κ·Έλž˜ν”„μ˜ μƒμŠΉ 및 ν•˜κ°•μ„ νŒŒμ•…ν•  수 있으며
λ§ˆμ§€λ§‰μ— λ§€λ„ν•˜μ§€ μ•Šκ³  남은 코인이 μ‘΄μž¬ν•  경우 이전에 κ·Ήμ†Œ μ§€μ μ—μ„œ 코인을 κ΅¬λ§€ν•˜κ³  아직 νŒλ§€ν•˜μ§€ λͺ»ν•œ 것이기 λ•Œλ¬Έμ—
κ·ΉλŒ€ 지점을 κ°±μ‹  쀑인 μƒν™©μ΄λΌλŠ” 것을 μ˜λ―Έν•˜κ³  λ”°λΌμ„œ λ§ˆμ§€λ§‰ λ‚ μ˜ μ‹œμ„Έμ— νŒ”λ©΄ μ΅œλŒ€ 이읡을 μ·¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μ½”λ“œ


import sys

N, W = list(map(int, sys.stdin.readline().split()))
coins = [int(sys.stdin.readline()) for _ in range(N)]


def solution(budget):
    coin_count, prev = 0, coins[0]

    for price in coins[1:]:
        if prev > price and coin_count:
            # 맀도
            budget += coin_count * prev
            coin_count = 0
        elif prev < price and not coin_count:
            # 맀수
            coin_count = budget // prev
            budget -= coin_count * prev

        prev = price

    # ν˜„μž¬ λ§€λ„ν•˜μ§€ μ•Šμ€ 코인이 μžˆλ‹€λŠ” 것은 이전에 μ΅œμ €κ°€μ— κ΅¬λ§€ν•œ 이λ ₯이 μžˆλ‹€λŠ” 의미
    if coin_count:
        budget += coin_count * coins[-1]

    return budget


print(solution(W))
λ°˜μ‘ν˜•

πŸ’¬ λŒ“κΈ€