package backjun.Esorting;
import java.util.Scanner;
import java.util.HashMap;
import java.util.Arrays;
public class 좌표압축 {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] sort = new int[n];
for (int i=0; i<n; i++){
arr[i] = sc.nextInt();
sort[i] = arr[i];
}
sc.close();
Arrays.sort(sort);
HashMap<Integer, Integer> map = new HashMap<>();
int idx = 0;
for(int i:sort){
if(!map.containsKey(i)){
map.put(i, idx++);
}
}
for(int i: arr)
System.out.print(map.get(i) +" ");
}
}
처음에 좌표 정보를 받을때 sort 시킬 배열에도 같이 저장한다.
sort 진행 한 후 HashMap을 통해 정렬된 수를 key 값으로 하고 1씩 증가시켜 해당 수가 몇 번째로 큰 수인지 저장시킨다.
최종적으로 처음 좌표를 저장한 arr를 순회하면서 HashMap의 Value 값을 출력함으로서 문제 해결
이 문제를 통해 알게된 Java 내장 함수 및 자료구조
Arrays.sort() --> 당연하게도 정렬 진행
Map이란?
Map은 리스트나 배열처럼 순차적으로(sequential) 해당 요소 값을 구하지 않고 key를 통해 value를 얻는다.
맵(Map)의 가장 큰 특징이라면 key로 value를 얻어낸다는 점이다.
-특징
1. 요소의 저장 순서를 유지하지 않습니다.
2. key : 중복을 허용 X
--value : 중복은 허용 O
Map 사용하기
put 메소드를 통해 정보 저장 ex) -> map.put(i, idx++);
get 메소드를 통해 키에 해당하는 value 출력
containsKey 메소드를 통해 해당 키가 있는지 확인
remove 메소드를 통해 해당 키 값과 value 삭제
size 메소드를 통해 저장되어있는 키, value 쌍의 개수 확인
Map 클래스 종류
HashMap
HashMap 은 Map Interface 를 Implements 한 클래스로서 중복을 허용하지 않는다.
Map 의 특징인 Key 와 Value 의 쌍으로 이루어지며, key 또는 value 값으로써 null 을 허용한다.
TreeMap
TreeMap 역시 중복을 허용하지 않으며, Key 와 Value 의 쌍으로 이루어져 있다.
HashMap 과 다른 점은 SortedMap을 상속하였으며, Key 값들에 대한 정렬이 이루어진다는 점이다.
HashTableMap
HashTable Map , key 또는 value 값으로써 null 을 허용하지 않는다. ( HashMap 과 차이점 )