백준

백준 18870 좌표 압축(Java)

Park DJ 2023. 2. 7. 23:25

https://www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌

www.acmicpc.net


 

해석 및 팁

 


 

이 문제는 좌표 압축을 사용하는 문제입니다. 자세한 내용은 위 영상을 참조하시기 바랍니다.

https://www.youtube.com/watch?v=_7dFwnPqahg&ab_channel=IOIKOREA


 

Java 코드

 


import java.util.Scanner;
import java.util.Arrays;
import java.util.HashMap;

public class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    StringBuilder sb = new StringBuilder();
    HashMap<Integer, Integer> map = new HashMap<>();

    int count = 0;
    int n = sc.nextInt();
    int[] arr = new int[n];
    int[] sort = new int[n];

    for(int i = 0; i < n; i++) arr[i] = sort[i] = sc.nextInt();

    Arrays.sort(sort);

    for(int i = 0; i < n; i++) {
      if(!map.containsKey(sort[i])) map.put(sort[i], count++);
    }

    for(int i = 0; i < n; i++) sb.append(map.get(arr[i])+" ");

    System.out.println(sb);
  }
}