만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

온라인 뱅킹

시간 제한1초메모리 제한128 MB

요약
여러 시나리오에서 create, deposit, withdraw, transfer 명령을 차례로 처리하며 각 요청의 결과를 출력한다.
난이도

쉬움10점 중 3점

유형
시뮬레이션, 구현, 해시맵, 문자열
정답자
아직 제출이 없습니다

문제

중앙은행은 한 나라의 통화 정책을 책임지는 기관으로, 다른 여러 은행을 감시하고 감독하는 일도 맡는다. 은행 계좌를 감시하는 간단한 감독 도구 역할을 하는 프로그램을 작성하라. 이 프로그램은 은행 요청들을 차례로 읽어 각 요청을 계좌에 적용하고, 모든 요청의 처리 결과를 출력한다.

입력

입력은 여러 개의 시나리오로 이루어진다.

각 시나리오는 정수 AA (0<A≤1000 < A \le 100) 하나가 적힌 줄로 시작한다. AA는 감독을 시작하는 시점에 존재하는 계좌의 수이다. 이어지는 AA개의 줄은 각각 계좌 하나를 나타내며, 계좌 번호, 공백 하나, 그리고 그 계좌의 처음 잔액을 나타내는 음이 아닌 십진수로 이루어진다.

계좌 목록 다음에는 요청들이 한 줄에 하나씩 주어진다. 각 요청 줄은 명령어로 시작하고, 필요하면 공백 하나로 구분된 매개변수가 뒤따른다. 명령어는 다음과 같다.

명령어의미개수매개변수
create새 계좌 개설1새 계좌 번호
deposit계좌에 입금2계좌 번호, 입금액
withdraw계좌에서 출금2계좌 번호, 출금액
transfer계좌 간 송금3보내는 계좌, 받는 계좌, 금액

한 시나리오의 요청 수는 00개 이상 10001000개 이하이다. 한 시나리오의 요청들 뒤에는 end라는 단어가 적힌 줄과 빈 줄 하나가 오고, 그 뒤에 다음 시나리오가 이어진다. 전체 입력은 AA 자리에 00이 적힌 줄로 끝난다.

모든 계좌 번호는 십진 숫자 정확히 네 자리, 슬래시(/), 그리고 그 계좌를 운영하는 은행을 나타내는 숫자 한 자리로 이루어진다. 각 은행은 고유한 코드를 가지므로, 같은 네 자리 번호라도 은행 코드가 다르면 서로 다른 계좌이다.

모든 금액은 소수점 아래 정확히 두 자리로 표기된 음이 아닌 십진수이며, 어떤 금액도 10000.0010000.00을 넘지 않는다. 불필요한 앞자리 0은 없다. 즉, 1.001.00보다 작은 금액만 0으로 시작할 수 있다.

출력

각 요청마다 정확히 한 줄을 출력한다. 줄은 명령어로 시작하며, 명령어에 금액 매개변수가 있으면 명령어 바로 뒤에 공백 하나와 그 금액을 출력한다. 그다음 콜론(:), 공백 하나, 그리고 처리 결과를 출력한다.

create의 매개변수는 계좌 번호이므로 금액은 출력하지 않는다. 같은 은행에 같은 번호의 계좌가 이미 있으면 결과는 already exists이고, 그렇지 않으면 잔액 00인 계좌를 개설하고 ok를 출력한다.

create를 제외한 모든 명령어에서, 매개변수로 지정된 계좌가 존재하지 않으면 결과는 no such account이다. 필요한 계좌(transfer의 경우 두 계좌 모두)가 존재하면 아래 규칙을 적용한다.

  • deposit: 금액을 계좌 잔액에 더한다. 결과는 항상 ok이다.
  • withdraw: 잔액이 금액보다 엄격히 작으면 결과는 insufficient funds이고, 그렇지 않으면 금액을 빼고 ok를 출력한다.
  • transfer: 두 계좌 번호가 (은행 코드까지 포함하여) 같으면 결과는 same account이다. 그렇지 않고 보내는 계좌의 잔액이 금액보다 엄격히 작으면 결과는 insufficient funds이다. 그 외의 경우에는 돈을 옮기고, 두 계좌가 같은 은행이면 ok, 다른 은행이면 interbank를 출력한다.

각 시나리오 뒤에는 end가 적힌 줄과 빈 줄 하나를 출력한다. 마지막 시나리오의 end 뒤에는 goodbye라는 단어가 적힌 줄을 하나 더 출력한다.

예제1

  1. 예제 1

    입력
    3
    1234/5 100.00
    4321/6 150.20
    5432/5 1600.00
    withdraw 1234/5 20.00
    deposit 1234/5 35.00
    withdraw 1234/5 200.00
    transfer 5432/5 1234/5 100.50
    transfer 5432/5 4321/6 50.00
    create 1234/5
    create 1236/5
    transfer 1236/5 1236/5 100.00
    transfer 1236/5 1234/5 100.00
    withdraw 0000/0 100.00
    deposit 0000/0 0.11
    transfer 1234/5 0000/0 10000.00
    end
    
    1
    9999/9 9.40
    deposit 9999/9 6.92
    withdraw 9999/9 9.68
    withdraw 9999/9 6.64
    end
    
    0
    
    예상 출력
    withdraw 20.00: ok
    deposit 35.00: ok
    withdraw 200.00: insufficient funds
    transfer 100.50: ok
    transfer 50.00: interbank
    create: already exists
    create: ok
    transfer 100.00: same account
    transfer 100.00: insufficient funds
    withdraw 100.00: no such account
    deposit 0.11: no such account
    transfer 10000.00: no such account
    end
    
    deposit 6.92: ok
    withdraw 9.68: ok
    withdraw 6.64: ok
    end
    
    goodbye