알고리즘/수학문제

[백준] 18870번 좌표 압축 #Java

VIPeveloper 2022. 5. 22. 11:42
728x90
반응형

1. 복사 배열을 만든다.

2. 순회하면서 값과 인덱스를 저장하는 해시맵을 구성한다.

3. 해당 값을 꺼내 출력한다.

 

import java.io.*;
import java.util.*;

public class Main {

    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        HashMap<Integer,Integer> hashMap = new HashMap<>();
        int n = Integer.parseInt(br.readLine());
        int [] answer = new int [n];
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        for (int i = 0; i < n; i++) {
            answer[i] = Integer.parseInt(st.nextToken());
        }
        int [] tmp = answer.clone();

        Arrays.sort(tmp);

        int cnt = 0;
        for (int i = 0; i < n; i++) {
            if(!hashMap.containsKey(tmp[i])){
                hashMap.put(tmp[i],cnt++);
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(hashMap.get(answer[i])).append(' ');
        }
        System.out.println(sb.toString());
    }
}
728x90
반응형