주문 상태 관리


답안 제출

Points: 50 (partial)
시간 제한: 1.0s
메모리 제한: 64M

문제 유형
허용된 언어
C

문제

여러 주문이 주어진다. 모든 주문의 초기 상태는 ORDERED다.

이후 명령을 처리하라.

CHANGE id quantity price
PAY id
SHIP id
DONE id
CANCEL id
PRINT id

상태 전이 규칙은 다음과 같다. 현재 상태가 전이의 출발 상태와 다르면 그 명령은 실패한다.

PAY    : ORDERED -> PAID
SHIP   : PAID -> SHIPPED
DONE   : SHIPPED -> DONE
CANCEL : ORDERED 또는 PAID -> CANCELED

CHANGE는 상태가 ORDERED일 때만 수량과 가격을 바꾼다. ORDERED가 아니면 아무 것도 하지 않는다.

입력

N
id user item quantity price
...
Q
command
...

출력

  • PAY, SHIP, DONE, CANCEL은 성공하면 OK, 실패하면 FAIL을 출력한다.
  • CHANGEOK/FAIL을 출력하지 않는다. 변경 여부는 이후 PRINT로만 확인된다.
  • PRINT는 다음 형식으로 출력한다. total = quantity * price다.
id user item quantity price status total

제한

1 <= N <= 50
1 <= Q <= 100
id는 중복되지 않는다.
명령에서 참조하는 id는 항상 존재한다.
user, item 길이 <= 19
1 <= quantity, price <= 100000
total은 최대 10,000,000,000이 될 수 있다.

예제 입력

2
100 alice book 2 5000
101 bob pen 3 1000
8
PRINT 100
CHANGE 100 1 6000
PAY 100
CANCEL 100
SHIP 100
PRINT 100
PAY 101
PRINT 101

예제 출력

100 alice book 2 5000 ORDERED 10000
OK
OK
FAIL
100 alice book 1 6000 CANCELED 6000
OK
101 bob pen 3 1000 PAID 3000
힌트 보기
typedef enum {
    ORDERED, PAID, SHIPPED, DONE, CANCELED
} OrderStatus;
typedef struct {
    int id;
    char user[20];
    char item[20];
    int quantity;
    int price;
    OrderStatus status;
} Order;

코멘트

현재 작성된 코멘트가 없습니다.