묶음 낙찰
문제
한 경매장에 물품 N개가 나왔다. 1번부터 N번까지의 각 물품에는 그 물품을 내놓은 상회의 번호와 감정가가 적혀 있다.
이 경매장에는 묶음 낙찰이라는 규칙이 있다. 어떤 물품을 낙찰받은 사람은, 그 물품보다 감정가가 낮으면서 내놓은 상회도 다른 물품을 모두 묶음으로 함께 가져갈 수 있다. 감정가가 똑같은 물품은 가져갈 수 없고, 같은 상회가 내놓은 물품도 가져갈 수 없다.
각 물품을 낙찰받았을 때 묶음으로 함께 가져갈 수 있는 물품들의 감정가 합을, 물품이 나온 순서대로 계산하는 프로그램을 작성하여라.
예를 들어 N=5개의 물품 정보가 다음의 표와 같다고 해보자.
| 물품 번호 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 상회 번호 | 1 | 2 | 2 | 3 | 1 |
| 감정가 | 4 | 5 | 6 | 3 | 2 |
각 물품을 낙찰받았을 때 함께 가져갈 수 있는 물품과 그 감정가 합을 표로 정리하면 다음과 같다.
| 물품 번호 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 함께 가져가는 물품 | 4번 | 1번, 4번, 5번 | 1번, 4번, 5번 | 5번 | 없음 |
| 감정가 합 | 3 | 9 | 9 | 2 | 0 |
1번 물품의 감정가는 4다. 감정가가 4보다 낮은 물품은 4번의 3과 5번의 2인데, 5번 물품은 1번 물품과 같은 1번 상회에서 나왔으므로 가져갈 수 없다. 그래서 3이다.
3번 물품의 감정가는 6이다. 감정가가 6보다 낮은 물품은 1번의 4, 2번의 5, 4번의 3, 5번의 2인데, 2번 물품은 3번 물품과 같은 2번 상회에서 나왔으므로 가져갈 수 없다. 그래서 4 + 3 + 2 = 9다.
5번 물품의 감정가는 2이고 이보다 낮은 감정가는 없다. 그래서 가져갈 물품이 없고 0이다. 따라서 이 경우의 정답은 차례대로 3, 9, 9, 2, 0이다.
감정가가 같은 물품이 여럿 나올 수도 있다. 이 경우 서로를 가져갈 수 없으므로, 감정가가 같은 물품들끼리는 서로의 답에 영향을 주지 않는다.
입출력 예시
예시 1
입력
5 1 4 2 5 2 6 3 3 1 2
출력
3 9 9 2 0
예시 2
입력
4 1 1 2 2 3 3 4 4
출력
0 1 3 6
예시 3
입력
3 2 10 1 1656 1 690
출력
0 10 10
입력 조건
가장 먼저 첫째 줄에 물품의 수 N이 주어진다. N은 1 이상 200,000 이하의 자연수다.
이어서 N개의 줄에 걸쳐 1번부터 N번까지의 물품 정보가 차례대로 주어진다. 각 줄에는 그 물품을 내놓은 상회의 번호와 감정가가 공백으로 구분되어 주어진다. 상회의 번호는 1 이상 N 이하의 자연수이고, 감정가는 1 이상 2,000 이하의 자연수다.
입력 전체의 크기는 최대 약 2.1MB다. 줄의 수가 최대 200,001개이므로, 입력 전체를 한 번에 읽어서 줄 단위로 나누는 방식으로 처리해야 한다.
출력 조건
1번부터 N번까지의 각 물품에 대하여, 묶음으로 함께 가져갈 수 있는 물품들의 감정가 합을 한 줄에 하나씩 차례대로 출력한다. 가져갈 물품이 없으면 그 줄에 0을 출력한다. 출력할 줄이 최대 20만 개이므로, 결과를 줄바꿈으로 이어 붙여 한 번에 출력해야 한다. 마지막 줄 뒤에는 줄바꿈 하나만 붙으며, 빈 줄을 더 붙이지 않는다.
요구사항
- 감정가가 자기와 똑같은 물품은 가져갈 수 없습니다. 감정가가 더 낮아야 합니다
- 같은 상회에서 나온 물품은 감정가가 낮아도 가져갈 수 없습니다
- 출력 순서는 물품이 나온 순서, 다시 말해 입력에 주어진 순서입니다
- 가져갈 물품이 없으면 0을 출력합니다
- N이 최대 20만이므로 물품마다 다른 모든 물품을 확인하면 시간이 모자랍니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 출력이 글자 하나까지 기대값과 같아야 합니다. 줄 안의 빈칸은 다른 글자와 똑같이 봅니다.
- 케이스는 16개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 16개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 16개를 전부 통과해야 해결입니다.
3 2 10 1 1656 1 690
0 10 10
4 1 1 2 2 3 3 4 4
0 1 3 6
5 1 4 2 5 2 6 3 3 1 2
3 9 9 2 0
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.