https://www.acmicpc.net/problem/18870
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
문제 이해를 잘못해서 머리 박박 긁었던 문제
그니까, 배열을 오름차순으로 정렬해서 자기보다 작은 수가 몇개 있는지 알아보면 된다.
주의할 점은 출력할 때 입력받은 순서를 지킬 것!
설명은 주석에
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
//중복 방지 위해
Map<Integer, Integer> map = new HashMap<>();
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
//정렬하기 위함. 입력받은 순으로 출력해야해서 배열 따로 생성
int[] tmp = new int[N];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++){
int n = Integer.parseInt(st.nextToken());
arr[i]=n;
tmp[i]=n;
}
//오름차순 정렬
Arrays.sort(tmp);
int cnt=0;
for (int i = 0; i < tmp.length; i++) {
//정렬된 tmp 배열 보면서 확인
//아래코드 == if(map.get(tmp[i])==null) : map에 tmp[i]값이 없으면
if(!map.containsKey(tmp[i])) {
//map에 push해줌
map.put(tmp[i], cnt++);
}
}
for(int i=0;i<N;i++){
sb.append(map.get(arr[i]) + " ");
}
System.out.println(sb);
}
}
|
cs |