← Back to List

7131번: Õhne vanaraamatupood ↗

Solutions

Python 3
1.4 KB | 1077 chars
def solve():
  N, p0, T = input().split()
  N = int(N)
  p0 = float(p0)
  T = int(T)

  l = [input().split() for _ in range(N)]
  prices = [0] * (N)
  cnt = 1 # 가격을 제시하고 있는 로봇의 수 (초기 1번 로봇만 가격 제시)
  prices[0] = p0 # 1번 로봇의 초기 가격 설정

  # 1일부터 T-1일까지 시뮬레이션 (T일 아침 가격이 목표이므로)
  for i in range(1, T):
    # 이전 날짜(i-1)의 가격들을 기준으로 현재 평균 계산
    avg = sum(prices) / cnt if cnt > 0 else 0

    # 각 로봇에 대해 가격 갱신 여부 확인
    for idx in range(N):
      start_date, interval, margin_rate = l[idx]
      start_date = int(start_date)
      interval = int(interval)
      margin_rate = float(margin_rate)

      # 현재 날짜(i)가 로봇의 시작일 이후이고, 갱신 간격에 해당하는 날짜인 경우
      if i >= start_date and (i - start_date) % interval == 0:
        # 이 로봇이 이전에 가격을 제시한 적이 없다면 (가격이 0이라면)
        if prices[idx] == 0:
          cnt += 1 # 활성화된 로봇 수 증가
        
        # 새로운 가격 계산 및 반올림 (소수점 둘째 자리까지)
        prices[idx] = round(avg * (1 + margin_rate), 2)
  
  # 최종 가격 출력 (소수점 둘째 자리까지)
  for price in prices:
    print(f"{price:.2f}")


if __name__ == "__main__":
  tc = 1
  for t in range(1, tc+1):
    ret = solve()