만드는 중입니다

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

거래 대차 균형 검증

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

요약
계정 목록과 거래 항목을 읽고, 차변과 대변이 0으로 맞지 않는 거래마다 예외 보고서를 출력한다.
난이도

쉬움10점 중 3점

유형
구현, 해시맵, 시뮬레이션, 완전 탐색
정답자
아직 제출이 없습니다

문제

총계정원장(general ledger)에 거래를 전기(posting)하는 초기 처리 단계 중 하나를 수행하는 프로그램을 작성하세요.

복식부기(double-entry bookkeeping)의 핵심 원칙은 모든 차변(debit)의 합이 모든 대변(credit)의 합과 같아야 한다는 것이며, 이는 각 거래마다 성립해야 합니다.

이 프로그램에서 양수는 차변, 음수는 대변을 나타냅니다. 예를 들어 2.00은 2달러 차변, -2.00은 2달러 대변입니다.

프로그램의 목적은 각 거래의 차변과 대변이 균형을 이루는지 확인하고, 균형이 맞지 않는 거래를 보고하는 것입니다.

입력

입력은 두 부분으로 구성됩니다.

첫 번째 부분은 총계정원장의 계정 목록으로, 최대 100개의 계정이 한 줄에 하나씩 다음 형식으로 주어집니다.

nnnxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

여기서 nnn은 세 자리 계정 번호이고, xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx는 1자에서 30자 사이의 계정 이름 문자열입니다. 이 부분은 000으로 시작하는 레코드로 끝나며, 000은 계정 번호로 사용되지 않습니다.

두 번째 부분은 한 줄에 하나씩, 15자 길이의 레코드로 구성되며 형식은 다음과 같습니다.

sssnnnxxxxxxxxx

여기서 sss는 세 자리 일련번호, nnn은 세 자리 계정 번호, xxxxxxxxx는 소수점을 생략한 아홉 자리 금액(달러와 센트, 즉 센트 단위의 정수 값)입니다. 각 레코드는 한 거래의 한 항목이며, 하나의 거래는 동일한 일련번호를 가진 2개에서 10개의 항목으로 이루어집니다. 각 거래의 항목들은 입력에서 연속하여 나타납니다. 이 부분은 일련번호가 000인 레코드로 끝납니다.

출력

차변과 대변이 균형을 이루는 거래에 대해서는 아무것도 출력하지 않습니다.

균형이 맞지 않는 거래에 대해서는 다음 형식의 예외 보고서를 출력합니다.

*** Transaction sss is out of balance ***
nnn xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx vvvvvvv.vv
nnn xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx vvvvvvv.vv
...
999 Out of Balance                 vvvvvvv.vv

여기서 nnn은 계정 번호, xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx는 해당 계정 이름, vvvvvvv.vv는 금액입니다. 각 줄은 다음과 같이 정렬합니다: 세 자리 계정 번호, 공백 한 칸, 30자 폭에서 왼쪽 정렬한 계정 이름, 공백 한 칸, 10자 폭에서 오른쪽 정렬한 금액. 항목은 입력에서 받은 순서대로 나열합니다.

보고서의 마지막 줄은 거래를 균형 맞추기 위해 직접 만드는 항목으로, 특별 계정 번호 999(가계정, suspense account)와 이름 Out of Balance를 사용하며, 그 금액은 나머지 항목들의 합을 상쇄하는 값입니다. 연속하는 예외 보고서 사이에는 빈 줄을 하나 넣습니다.

예제3

  1. 예제 1

    입력
    111Cash 
    121Accounts Receivable
    211Accounts Payable
    241Sales Tax Payable 
    401Sales
    555Office Supplies
    000No such account
    100111    11795
    100121   -11795
    101121      105
    101241       -7 
    101401     -100
    102211   -70000
    102555    40000
    103111   -40000 
    103555    40000
    000000        0
    
    예상 출력
    *** Transaction 101 is out of balance ***
    121 Accounts Receivable                  1.05
    241 Sales Tax Payable                   -0.07
    401 Sales                               -1.00
    999 Out of Balance                       0.02
    
    *** Transaction 102 is out of balance ***
    211 Accounts Payable                  -700.00
    555 Office Supplies                    400.00
    999 Out of Balance                     300.00
    
  2. 예제 2

    입력
    100Cash
    200Revenue
    000End
    001100     5000
    001200    -5000
    002100    10000
    002200   -10000
    000000        0
    
    예상 출력
  3. 예제 3

    입력
    100Cash
    200Revenue
    000End
    001100     1000
    001200     -900
    000000        0
    
    예상 출력
    *** Transaction 001 is out of balance ***
    100 Cash                                10.00
    200 Revenue                             -9.00
    999 Out of Balance                      -1.00