본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩테스트/백준 알고리즘] 18870번 - 좌표 압축 (Java, 자바 풀이)

by 코코의 주인 2022. 12. 21.

문제

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

 

18870번: 좌표 압축

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

www.acmicpc.net


문제 설명


문제 풀이

 


코드

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

class Main {
    public static void main(String[] args) throws IOException {
    
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        Map<Integer, Integer> map = new HashMap<>();
        int N = Integer.parseInt(br.readLine());
        int[] input = new int[N];
        int[] zip = new int[N];
        st = new StringTokenizer(br.readLine(), " ");

        for(int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            input[i] = zip[i] = num;
        }
        Arrays.sort(zip);

        int value = 0;
        for (int key : zip) {
            if (!map.containsKey(key)) {
                map.put(key, value++);
            }
        }

        for (int i : input) {
            bw.write(map.get(i) + " ");
        }
        bw.close();
    }
}

 

<시간 초과>

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

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st;
        Map<Integer, Integer> map = new HashMap<>();
        int N = Integer.parseInt(br.readLine());
        List<Integer> input = new ArrayList<>();
        List<Integer> zip = new ArrayList<>();
        st = new StringTokenizer(br.readLine(), " ");

        for(int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            input.add(num);
            if (!zip.contains(num)) {
                zip.add(num);
            }
        }
        Collections.sort(zip);

        for (int i = 0; i < zip.size(); i++) {
            if (!map.containsKey(zip.get(i))) {
                map.put(zip.get(i), i);
            }
        }

        for (int i : input) {
            bw.write(map.get(i) + " ");
        }
        bw.close();
    }
}

 

댓글