[JAVA] 백준 18870번 - 좌표 압축

닥개·2025년 4월 17일

공부

목록 보기
14/23

수직선 위에 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);
        
    }
}
profile
발바닥부터 시작하는 코딩공부

0개의 댓글