수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
입력 : 2 4 -10 4 -9
중복제거 및 정렬: -10 -9 2 4 →→ ( 대치 ! 0 ,1,2,3,4,....)
출력: 2 3 0 3 1
❗StringBuilder 사용으로 println보다 빠른 출력
❗HashMap
1) map.get으로 value값을 불러오다.
2) map.containsKey(k) : k값이 map에 있는지 확인
import java.util.*;
import java.io.*;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int a[] = new int[N];
int sorta[] = new int[N];
for(int i=0;i<N;i++){
a[i] = sc.nextInt();
sorta[i] = a[i];
}
sc.close();
Map<Integer,Integer> map_a = new HashMap<Integer,Integer>();
Arrays.sort(sorta);
int index=0;
for(int k:sorta) {
if(map_a.containsKey(k)==false){
map_a.put(k,index);
index++;
}
}
// 빠른 출력
StringBuilder sb = new StringBuilder();
for (int k : a) {
sb.append(map_a.get(k)).append(" ");
}
System.out.println(sb);
}
}