백준
[백준 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
반응형