도서관 대출 시스템


답안 제출

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

문제 유형
허용된 언어
C

문제

도서 목록과 회원 목록이 주어진다. 이후 다음 명령을 처리하라.

BORROW member_id book_id
RETURN book_id
PRINT_BOOK book_id
PRINT_MEMBER member_id

각 명령의 의미는 다음과 같다.

BORROW member_id book_id
: 아래 조건을 모두 만족하면 대출에 성공한다.
  - 그 book_id의 책이 존재한다.
  - 그 member_id의 회원이 존재한다.
  - 책이 현재 대출 중이 아니다.
  - 회원의 현재 대출 권수(current)가 한도(limit)보다 작다.
  성공하면 책을 대출 중으로 표시하고 borrowerId를 그 회원으로 정하며,
  회원의 current를 1 늘린 뒤 OK를 출력한다.
  하나라도 만족하지 못하면 상태를 바꾸지 않고 FAIL을 출력한다.

RETURN book_id
: 그 책이 존재하고 현재 대출 중이면, 책을 대출 가능 상태로 되돌리고
  빌렸던 회원의 current를 1 줄인 뒤 OK를 출력한다.
  책이 없거나 대출 중이 아니면 FAIL을 출력한다.

PRINT_BOOK book_id
: 책의 상태를 출력한다.

PRINT_MEMBER member_id
: 회원의 현재 대출 권수를 출력한다.

입력

B
book_id title
...
M
member_id name limit
...
Q
command
...

출력

BORROW, RETURN은 성공하면 OK, 실패하면 FAIL을 출력한다.

PRINT_BOOK은 대출 가능하면 다음 형식으로 출력한다.

title AVAILABLE 0

대출 중이면 다음 형식으로 출력한다.

title BORROWED 빌린회원id

PRINT_MEMBER는 다음 형식으로 출력한다.

name current

제한

1 <= B, M <= 50
1 <= Q <= 100
1 <= book_id, member_id <= 100000
title 길이 <= 29
name 길이 <= 19
0 <= limit <= 50
id는 종류별로 중복되지 않는다.
PRINT_BOOK에서 참조하는 book_id는 항상 존재한다.
PRINT_MEMBER에서 참조하는 member_id는 항상 존재한다.

예제 입력

3
1 Cbook
2 Algo
3 Data
2
10 Kim 2
20 Lee 1
8
BORROW 10 1
BORROW 20 1
BORROW 20 2
PRINT_BOOK 1
PRINT_MEMBER 10
RETURN 1
BORROW 20 1
PRINT_BOOK 1

예제 출력

OK
FAIL
OK
Cbook BORROWED 10
Kim 1
OK
FAIL
Cbook AVAILABLE 0
힌트 보기
typedef struct {
    int id;
    char title[30];
    int borrowed;
    int borrowerId;
} Book;
typedef struct {
    int id;
    char name[20];
    int limit;
    int current;
} Member;

코멘트

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