ALGORITHM
백준 18870 좌표 압축 (Java)
공부하는_다온
2023. 2. 28. 22:49
1. 문제 링크
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
일단 clone()을 이용해 배열을 복사한다.
배열을 정렬하고 그 순서대로 HashMap에 추가한다. (Map이 중복 불가이기 때문)
그러면 그 보다 작은 수의 개수는 i가 아니라 index로 별도로 구해야 한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] X = new int[N];
String[] split = br.readLine().split(" ");
for (int i = 0; i < N; i++) {
X[i] = Integer.parseInt(split[i]);
}
int[] sortX = X.clone();
Arrays.sort(sortX);
HashMap<Integer, Integer> map = new HashMap<>();
int idx = 0;
for (int i = 0; i < N;i++) {
if(!map.containsKey(sortX[i])) {
map.put(sortX[i], idx++);
}
}
for (int i = 0; i < N; i++) {
sb.append(map.get(X[i]) + " ");
}
System.out.println(sb);
}
}