관측소 고도 단계
문제
어느 산악 지대에 관측소가 N개 흩어져 있다. 관측소마다 해발 고도를 재어 두었는데, 해수면보다 높으면 양수로 적고 해수면보다 낮으면 음수로 적는다.
연구원은 관측소마다 고도 단계를 새로 붙이려고 한다. 어떤 관측소의 고도 단계는 그 관측소보다 고도가 낮은 서로 다른 고도의 개수다. 그래서 가장 낮은 곳에 있는 관측소의 단계는 0이 되고, 고도가 같은 관측소끼리는 단계도 같아진다.
예를 들어 N=5개의 관측소에서 잰 고도가 다음의 표와 같다고 해보자.
| 관측소 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 고도 | 2 | 4 | -10 | 4 | -9 |
여기에 나타나는 서로 다른 고도는 -10, -9, 2, 4의 네 가지다. 낮은 것부터 늘어놓고 0부터 차례대로 단계를 붙이면 다음과 같다.
| 고도 | -10 | -9 | 2 | 4 |
|---|---|---|---|---|
| 단계 | 0 | 1 | 2 | 3 |
이 표를 보고 1번 관측소부터 차례대로 단계를 적으면 다음과 같다. 2번 관측소와 4번 관측소는 고도가 같으므로 단계도 같다.
| 관측소 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 단계 | 2 | 3 | 0 | 3 | 1 |
가장 높은 곳에 있는 관측소의 단계는 서로 다른 고도의 개수보다 하나 작다. 위 예시에서는 서로 다른 고도가 네 가지이므로 가장 높은 4미터 관측소의 단계가 3이 된다.
고도가 같은 관측소가 많이 섞여 있는 경우도 보자. N=6개의 관측소에서 잰 고도가 다음의 표와 같이 999미터와 1,000미터만 번갈아 나온다고 해보자.
| 관측소 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 고도 | 1000 | 999 | 1000 | 999 | 1000 | 999 |
서로 다른 고도가 두 가지뿐이므로 단계도 0과 1만 나온다. 999미터 관측소의 단계는 0이고 1,000미터 관측소의 단계는 1이다.
| 관측소 | 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|---|
| 단계 | 1 | 0 | 1 | 0 | 1 | 0 |
관측소는 100만 개까지 있을 수 있다. 그래서 관측소마다 나머지 관측소를 모두 들추어 고도를 견주는 방법으로는 시간 안에 끝나지 않는다.
N개의 관측소에서 잰 고도가 주어졌을 때, 1번 관측소부터 N번 관측소까지의 고도 단계를 차례대로 구하는 프로그램을 작성하여라.
입출력 예시
예시 1
입력
5 2 4 -10 4 -9
출력
2 3 0 3 1
예시 2
입력
1 849693849
출력
0
예시 3
입력
6 1000 999 1000 999 1000 999
출력
1 0 1 0 1 0
입력 조건
가장 먼저 첫째 줄에 관측소의 수 N이 주어진다. N은 1,000,000보다 작거나 같은 자연수다.
이어서 둘째 줄에 N개의 관측소에서 잰 고도가 1번 관측소부터 N번 관측소까지 차례대로 공백 하나로 구분되어 주어진다. 각 고도는 -1,000,000,000 이상 1,000,000,000 이하의 정수다.
고도가 같은 관측소가 여럿 있을 수 있다. 고도는 낮은 것부터 정리되어 주어지지 않고 아무 순서로 주어진다.
출력 조건
1번 관측소부터 N번 관측소까지의 고도 단계를 한 줄에 차례대로 출력한다.
각 단계 뒤에 공백을 하나 붙여서 출력한다. 그래서 줄의 마지막 수 뒤에도 공백이 하나 남는다.
그 뒤에 줄을 한 번 바꾸고 끝낸다. 빈 줄을 더 붙이지는 않는다.
채점은 출력을 기대값과 글자 하나까지 견준다. 줄 끝의 공백이 없으면 단계를 맞게 구했어도 틀린 답으로 처리된다. 예를 들어 관측소가 하나뿐일 때 출력해야 하는 글자는 0, 공백, 줄바꿈의 세 글자다.
요구사항
- 입력은 표준 입력으로 받고 답은 표준 출력으로 내보냅니다
- 어떤 관측소의 고도 단계는 그 관측소보다 고도가 낮은 서로 다른 고도의 개수입니다. 고도가 같은 관측소끼리는 단계도 같습니다
- 단계는 1번 관측소부터 N번 관측소까지 입력에 주어진 순서대로 한 줄에 출력합니다
- 각 수 뒤에 공백을 하나 붙이므로 줄의 마지막 수 뒤에도 공백이 하나 남습니다. 아래 예시의 줄 끝에는 눈에 보이지 않는 공백이 하나씩 있습니다
- 고도는 음수일 수 있습니다
- N이 1,000,000까지 올라가므로 관측소마다 다른 관측소를 모두 견주는 방법으로는 시간 안에 끝나지 않습니다
- 채점은 출력을 기대값과 글자 하나까지 견줍니다
- 표준 입력으로 읽고 표준 출력으로 내보내는 프로그램을 짜야 합니다
- 쓸 수 있는 말은 파이썬, 자바스크립트입니다
- 메모리 제한은 256MB입니다. 브라우저에서는 재지 않고 적기만 합니다
- 시간 제한은 출제자의 정답 코드를 같은 런타임에서 재서 정합니다
- 이 문제는 프롬프트가 아니라 코드를 냅니다. 그 코드는 이 기기의 브라우저에서 돌고, 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다. 실행 시간은 각자 기기가 적어 보내는 값이라, 코드와 기기 정보를 순위표에 같이 내걸어 둡니다.
- 케이스는 15개이고, 그 가운데 3개는 입력과 기대 출력을 함께 보여 줍니다. 나머지는 제출할 때만 쓰이고 화면에는 보여 주지 않습니다.
- 케이스 15개를 전부 통과해야 해결입니다.
예시
공개 케이스 3개입니다. 채점에는 숨은 케이스가 함께 쓰입니다. 케이스 15개를 전부 통과해야 해결입니다.
1 849693849
0
5 2 4 -10 4 -9
2 3 0 3 1
6 1000 999 1000 999 1000 999
1 0 1 0 1 0
풀이
코드는 이 기기에서돕니다. 서버로는 나온 출력의 지문과 걸린 시간만 갑니다. 맞았는지는 서버가 정합니다.
제출은 로그인 하셔야 됩니다. 공개 케이스로 돌려보는 것은 로그인 없이도 됩니다.
공개 케이스 3개로 돌려보기가 됩니다. 제출하면 숨은 케이스까지 돕니다.
이 문제를 푼 사람
아직 없습니다. 첫 번째가 되실 수 있습니다.