알고리즘 풀이 및 리뷰/[패캠] 핵심유형 20개로 한 번에 끝내는 알고리즘 코딩테스트 리뷰
[240225] 알고리즘 리부트 16일차 - 백준 18870 자바
앙갱
2024. 2. 25. 00:21
반응형
[Part1-Chapter05-Clip06]
- 백준 18870 좌표 압축


로직이 머리 속에서 한참 꼬여서 애를 먹었다. 처음에는 카운팅 배열을 쓰고자 했다. 간단하게 풀이가 가능할 것 같았지만 메모리 초과로 사용할 수 없었다. 어쩔 수 없이 다른 자료구조를 고민했다. 이차원 배열을 쓰자니 중복처리하는데 번거로울 것 같았고 해시셋을 쓰자니 순서부여가 어려워 해시맵을 이용해서 처리했다. 이미 키가 존재한다면 넘어가고 순서를 부여하는 인덱스를 별도로 관리했다.
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] arr = new int[n];
int[] temp = new int[n];
for (int i = 0; i < n; i++) {
int thisNum = sc.nextInt();
arr[i] = thisNum;
temp[i] = thisNum;
}
// 임시배열은 정렬해주기
Arrays.sort(temp);
HashMap<Integer, Integer> map = new HashMap<>();
int idx = 0;
for (int i = 0; i < n; i++) {
if (map.containsKey(temp[i]))
continue;
map.put(temp[i], idx);
idx++;
}
for (int i = 0; i < n; i++) {
arr[i] = map.get(arr[i]);
}
StringBuilder sb = new StringBuilder();
for (int i : arr) {
sb.append(i + " ");
}
System.out.println(sb);
}
}
반응형