주문 상태 관리
문제
여러 주문이 주어진다. 모든 주문의 초기 상태는 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을 출력한다.CHANGE는OK/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;
코멘트