알고리즘(Algorithm)/백준(Baekjoon)

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

나아가는중 2021. 12. 3. 17:16
반응형

백준 Baekjoon 18870번 좌표 압축 - JAVA


문제 풀이

주어진 입력 값들을 정렬했을 때 몇번째 순서인지 출력하는 문제이다.

 

입력 배열은 후에 다시 사용되어 새로운 배열에 복사한 다음 정렬한다.

Map 을 사용하여 0부터 좌표의 순서를 저장한다. 중복되는 좌표값들이 있기 때문에 Map을 사용한다.

 

입력 값들을 Map에서 찾으면 그 순서를 알 수 있다.

 

소스 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int[] arr = new int[N];

        StringTokenizer 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);

        Map<Integer, Integer> map = new HashMap<>();
        int idx = 0;
        for (int n : sorted) {
            if (!map.containsKey(n)) {
                map.put(n, idx++);
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int n : arr) {
            sb.append(map.get(n)).append(" ");
        }

        System.out.println(sb);
    }
}
반응형