
주어진 좌표를 크기 순서로 압축하여 출력하는 문제이다.
Set<> set = new TreeSet<>();
TreeSet은
해주는 편리한 인터페이스이다.
근데..
이번 문제의 경우 그냥 HashMap만 쓰는게 더 빠르다.
Set<Integer> set = new TreeSet<>();
for (int num : arr) set.add(num);
Map<Integer, Integer> map = new HashMap<>();
int idx = 0;
for (int num : set) {
map.put(num, idx++);
}
▲ TreeSet과 HashMap을 둘 다 쓰는 경우
int[] sorted = arr.clone();
Arrays.sort(sorted);
Map<Integer, Integer> map = new HashMap<>();
int idx = 0;
for (int num : sorted) {
if (!map.containsKey(num)) {
map.put(num, idx++);
}
}
▲ HashMap만 쓰는 경우
위 정보를 바탕으로 설계한 코드는 다음과 같다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine(), " ");
for(int i=0; i<N; i++){
arr[i] = Integer.parseInt(st.nextToken());
}
int[] sorted = arr.clone();
Arrays.sort(sorted);
HashMap<Integer, Integer> map = new HashMap<>();
int idx = 0;
for(int num : sorted){
if(!map.containsKey(num)){
map.put(num, idx++);
}
}
for(int i=0; i<N; i++){
bw.write(map.get(arr[i]) + " ");
}
br.close();
bw.flush();
bw.close();
}
}
맞았습니다!!