본문 바로가기
알고리즘/백준

백준 18870번 - 좌표 압축 (Java 8)

by latissimus 2022. 3. 5.

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

 

18870번: 좌표 압축

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

www.acmicpc.net

 

리스트와 맵 사용

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<Integer, Integer> map = new HashMap<>();
        List<Integer> list = new ArrayList<>();
        List<Integer> sortedlist = new ArrayList<>();

        int N = Integer.parseInt(br.readLine());
        int[] arr = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i=0; i<N; i++){
            int num = Integer.parseInt(st.nextToken());
            list.add(num);
        }
        sortedlist.addAll(list);
        Collections.sort(sortedlist);

        int value = 0;
        for(int i=0; i<sortedlist.size(); i++){
            if(!map.containsKey(sortedlist.get(i))){
                map.put(sortedlist.get(i), value++);
            }
        }
        for(int i=0; i<arr.length; i++){
            if (map.containsKey(list.get(i))) {
                list.set(i, map.get(list.get(i)));
            }
        }

        StringBuilder sb = new StringBuilder();
        for(int i=0; i<list.size(); i++){
            sb.append(list.get(i)).append(" ");
        }
        System.out.println(sb);
    }
}

 

처음에 맵을 사용하지 않고 리스트 두개로 했는데, 시간초과 나와서 블로그를 참고해서 했다.

st-lab 18870번 자바

 

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

https://www.acmicpc.net/problem/18870 Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌" data-og-host="www.acmicpc.net" data-og-source-url="https://www.acmicpc.net/problem/1887..

st-lab.tistory.com

 

댓글