Skip to content

Warehouse inventory management

1. Problem

물류 창고에서는 상품의 입고와 출고를 기록하여 현재 재고를 관리한다.

처음 보유한 상품 수량과 입출고 기록이 주어졌을 때, 작업이 끝난 후의 재고를 계산하는 프로그램을 작성하시오.

각 작업은 다음 두 가지 유형으로 구분한다.

  • 1 Q: 상품 (Q)개가 입고된다.
  • 2 Q: 상품 (Q)개가 출고된다.

출고할 때는 현재 재고가 충분한 경우에만 출고를 진행한다. 재고가 부족하면 해당 출고 작업은 취소되고 재고는 변경되지 않는다.

모든 작업을 처리한 후 다음 정보를 출력한다.

  • 최종 재고 수량
  • 성공적으로 처리된 입고 작업 수
  • 성공적으로 처리된 출고 작업 수
  • 취소된 출고 작업 수

입력

첫째 줄에 초기 재고 수량 (S)와 작업 횟수 (N)이 공백으로 구분되어 주어진다.

다음 (N)개의 줄에는 작업 유형 (T)와 수량 (Q)가 공백으로 구분되어 주어진다.

출력

첫째 줄에 최종 재고 수량을 출력한다.

둘째 줄에 성공적으로 처리된 입고 작업 수를 출력한다.

셋째 줄에 성공적으로 처리된 출고 작업 수를 출력한다.

넷째 줄에 취소된 출고 작업 수를 출력한다.

제한사항

  • (0 \leq S \leq 10000)
  • (1 \leq N \leq 100)
  • (T)는 1 또는 2이다.
  • (1 \leq Q \leq 1000)

2. Input example

Example 1

10 5
1 5
2 3
2 20
1 7
2 10

Example 2

3 4
2 5
1 4
2 2
2 10

3. Output example

3.1. Example 1

9
2
2
1

3.2. Example 2

5
1
1
2

4. Explanation

4.1. Example 1

초기 재고는 10개이다.

  • 5개 입고: 재고 15개
  • 3개 출고: 재고 12개
  • 20개 출고 시도: 재고 부족으로 취소
  • 7개 입고: 재고 19개
  • 10개 출고: 재고 9개

따라서 최종 재고는 9개이다. 입고는 2회, 출고는 2회 성공했으며, 출고 1회가 취소되었다.

4.2. Example 2

초기 재고는 3개이다.

  • 5개 출고 시도: 재고 부족으로 취소
  • 4개 입고: 재고 7개
  • 2개 출고: 재고 5개
  • 10개 출고 시도: 재고 부족으로 취소

따라서 최종 재고는 5개이다. 입고는 1회, 출고는 1회 성공했으며, 출고 2회가 취소되었다.

5. Answer

stock, n = map(int, input().split())

in_count = 0
out_count = 0
cancel_count = 0

for _ in range(n):
    t, q = map(int, input().split())

    if t == 1:
        stock += q
        in_count += 1
    else:
        if stock >= q:
            stock -= q
            out_count += 1
        else:
            cancel_count += 1

print(stock)
print(in_count)
print(out_count)
print(cancel_count)