증권 거래소
면접 대비시간 제한1초메모리 제한128 MB
각 종목마다 모든 호가에 대해 가격 조건을 만족하는 반대편 에이전트를 입력 순서대로 출력한다.
문제
전 세계 증권 거래소가 금융 위기로 큰 타격을 입었다. 거래소들은 이익을 지키기 위해 운영을 자동화하는 새로운 소프트웨어를 도입해 비용을 줄이려 한다.
거래를 성사시킬 수 있는 매수자와 매도자의 모든 짝을 찾아내는 것이 여러분의 과제이다.
입력
입력은 여러 종목(발행자)에 대한 정보로 이루어진다. 각 종목은 정수 , 공백 한 칸, 종목 코드가 적힌 줄로 시작한다. 그 다음 개의 줄에는 각각 하나의 호가가 주어진다.
하나의 호가는 참가자 이름, 공백 한 칸, 호가 종류(소문자 buy 또는 sell), 공백 한 칸, 그리고 소수점 아래가 정확히 세 자리인 가격으로 구성된다. buy 호가는 참가자가 지불할 의향이 있는 최대 가격을, sell 호가는 참가자가 팔고자 하는 최소 가격을 나타낸다.
- 각 종목 코드는 대문자(
A–Z) 1~10글자로 이루어진다. - 각 참가자 이름은 1~20글자이며 대소문자를 모두 포함할 수 있다.
- 한 종목 안에서 참가자 이름은 모두 서로 다르지만, 같은 참가자가 서로 다른 종목에 호가를 낼 수는 있다.
- .
- 어떤 가격도 을 넘지 않는다.
입력의 마지막 줄에는 문자열 0 END가 주어진다.
출력
각 종목에 대해 먼저 종목 코드를 한 줄에 출력한다. 그 다음 그 종목의 모든 호가에 대해(입력에 주어진 순서대로) 참가자 이름, 콜론(:), 공백 한 칸, 그리고 그 참가자와 거래가 성립할 수 있는 모든 상대의 목록을 출력한다. 두 참가자 중 한쪽은 매수, 다른 한쪽은 매도이며, 매도 가격이 매수 가격 이하일 때 거래가 성립한다.
상대의 이름은 공백 한 칸으로 구분하며, 그 종목의 입력에 나타난 순서대로 나열한다. 성립하는 호가가 없으면 대신 NO-ONE을 출력한다.