본문으로 건너뛰기
풀이 목록으로 돌아가기

BOJ 5103 - DVDs

2026-03-31
BOJ
브론즈 II
cpp
원본 문제 보기
구현
문자열
시뮬레이션

문제

BOJ 5103 - DVDs

각 DVD 상품의 최대 보유량 m, 현재 재고 s, 이벤트 수 t가 주어지고 S amount(대여)와 R amount(반납) 이벤트가 이어진다. 모든 이벤트 처리 후 상품 코드와 최종 재고를 출력한다. 재고는 0 이하가 될 수 없고 m을 초과할 수도 없다.

풀이

상품 코드가 #일 때까지 반복하면서 t개의 이벤트를 처리한다. S는 대여로 s를 감소시키되 음수가 되면 0으로 클램핑, R은 반납으로 s를 증가시키되 m을 초과하면 m으로 클램핑한다. 입출력 동기화를 꺼서 처리 속도를 확보한다.

코드

#include <iostream>
#include <string>
 
using namespace std;
 
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
 
  string stockCode;
  while (cin >> stockCode && stockCode != "#") {
    int m, s, t;
    cin >> m >> s >> t;
 
    for (int i = 0; i < t; ++i) {
      char type;
      int amount;
      cin >> type >> amount;
 
      if (type == 'S') {
        s -= amount;
        if (s < 0) s = 0;
      } else if (type == 'R') {
        s += amount;
        if (s > m) s = m;
      }
    }
    cout << stockCode << " " << s << "\n";
  }
 
  return 0;
}

복잡도

  • 시간: O(상품 수 * t)
  • 공간: O(1)

최근 글