백준

[백준 18870 with JAVA] 좌표 압축

종식당 2025. 2. 8. 18:08
728x90
반응형

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

 


📝 문제 설명

정수 N개의 좌표를 입력받으면 좌표들 중에서 해당 좌표보다 큰 좌표의 개수를 입력받은 순서대로 출력하면 된다.

✨ 제출 코드

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

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

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

        int [] lst = new int[N];

        for(int i = 0; i < N; i++){
            lst[i] = Integer.parseInt(st.nextToken());
        }

        HashSet<Integer> set = new HashSet<>();

        for(int item : lst){
            set.add(item);
        }

        List<Integer> sorted_lst = new ArrayList<>(set);

        Collections.sort(sorted_lst);

        Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < sorted_lst.size(); i++){
            map.put(sorted_lst.get(i),i);
        }

        StringBuilder sb = new StringBuilder();

        for(int item : lst){
            sb.append(map.get(item)).append(" ");
        }

        System.out.println(sb);
    }
}

✌️ 코드 설명

먼저 순위를 매기기 위해서는 정수들의 순서를 알아야할 것 같고 중복을 제거해야 할 것 같았다.
예시를 보면 같은 숫자는 같은 갯수를 출력하고 있기 때문에 일단 중복을 제거하였다.
set을 통해 중복 제거를 하고 이를 리스트에 담아서 정렬을 해주었다.
그 후 정렬을 한 리스트를 Map에 담아주었다.
이 Map에는 <해당 숫자, 숫자의 인덱스 값> 이렇게 들어가 있다. 

현재 오름차순으로 정렬되어 있기 때문에 (-10,0) (-9,1) 이런 식으로 들어가 있으며 이 순서대로 value값을 출력해 주면 된다.

 

😎 마무리

Map 인터페이스는 자바의 컬렉션 프레임워크에서 키-값 쌍을 저장하는 컬렉션의 기본 구조를 정의합니다. Map 인터페이스의 주요 메서드는 다음과 같습니다:

  • put(K key, V value): 주어진 키와 값을 맵에 저장합니다. 만약 동일한 키가 이미 존재하면, 기존 값이 새 값으로 덮어씁니다.
  • get(Object key): 주어진 키에 해당하는 값을 반환합니다. 만약 키가 존재하지 않으면 null을 반환합니다.
  • remove(Object key): 주어진 키에 해당하는 항목을 제거합니다.
  • containsKey(Object key): 주어진 키가 맵에 존재하는지 여부를 확인합니다.
  • containsValue(Object value): 주어진 값이 맵에 존재하는지 여부를 확인합니다.
  • size(): 맵에 저장된 키-값 쌍의 개수를 반환합니다.
  • keySet(): 맵에 있는 모든 키를 반환하는 Set을 반환합니다.
  • values(): 맵에 있는 모든 값을 반환하는 Collection을 반환합니다.
  • entrySet(): 맵에 있는 모든 키-값 쌍을 반환하는 Set<Map.Entry<K, V>>를 반환합니다.

 

728x90
반응형