증권 거래소

면접 대비

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

요약
각 종목마다 모든 호가에 대해 가격 조건을 만족하는 반대편 에이전트를 입력 순서대로 출력한다.
난이도

보통10점 중 4점

유형
배열, 구현, 완전 탐색, 정렬
정답자
아직 제출이 없습니다

문제

전 세계 증권 거래소가 금융 위기로 큰 타격을 입었다. 거래소들은 이익을 지키기 위해 운영을 자동화하는 새로운 소프트웨어를 도입해 비용을 줄이려 한다.

거래를 성사시킬 수 있는 매수자와 매도자의 모든 짝을 찾아내는 것이 여러분의 과제이다.

입력

입력은 여러 종목(발행자)에 대한 정보로 이루어진다. 각 종목은 정수 NN, 공백 한 칸, 종목 코드가 적힌 줄로 시작한다. 그 다음 NN개의 줄에는 각각 하나의 호가가 주어진다.

하나의 호가는 참가자 이름, 공백 한 칸, 호가 종류(소문자 buy 또는 sell), 공백 한 칸, 그리고 소수점 아래가 정확히 세 자리인 가격으로 구성된다. buy 호가는 참가자가 지불할 의향이 있는 최대 가격을, sell 호가는 참가자가 팔고자 하는 최소 가격을 나타낸다.

  • 각 종목 코드는 대문자(A–Z) 1~10글자로 이루어진다.
  • 각 참가자 이름은 1~20글자이며 대소문자를 모두 포함할 수 있다.
  • 한 종목 안에서 참가자 이름은 모두 서로 다르지만, 같은 참가자가 서로 다른 종목에 호가를 낼 수는 있다.
  • 1≤N≤10001 \le N \le 1000.
  • 어떤 가격도 1000010000을 넘지 않는다.

입력의 마지막 줄에는 문자열 0 END가 주어진다.

출력

각 종목에 대해 먼저 종목 코드를 한 줄에 출력한다. 그 다음 그 종목의 모든 호가에 대해(입력에 주어진 순서대로) 참가자 이름, 콜론(:), 공백 한 칸, 그리고 그 참가자와 거래가 성립할 수 있는 모든 상대의 목록을 출력한다. 두 참가자 중 한쪽은 매수, 다른 한쪽은 매도이며, 매도 가격이 매수 가격 이하일 때 거래가 성립한다.

상대의 이름은 공백 한 칸으로 구분하며, 그 종목의 입력에 나타난 순서대로 나열한다. 성립하는 호가가 없으면 대신 NO-ONE을 출력한다.

예제1

  1. 예제 1

    입력
    3 IBM
    OneBuyer buy 10.600
    TooExpensive sell 12.000
    ThisWillWork sell 10.600
    4 ACM
    one sell 129.999
    two buy 130.000
    three buy 131.000
    four sell 129.888
    4 CVUT
    seller sell 121.110
    toopoor buy 121.109
    sellertwo sell 121.111
    iamok buy 121.112
    0 END
    
    예상 출력
    IBM
    OneBuyer: ThisWillWork
    TooExpensive: NO-ONE
    ThisWillWork: OneBuyer
    ACM
    one: two three
    two: one four
    three: one four
    four: two three
    CVUT
    seller: iamok
    toopoor: NO-ONE
    sellertwo: iamok
    iamok: seller sellertwo