https://www.acmicpc.net/problem/18870
코드설명
좌표압축 문제입니다.
HashMap을 활용하여서 이미 좌표의 순위가 결정된 경우 더이상 처리하지 않도록 했습니다.
출력할때는 원래의 배열의 순서대로 출력해야하기에, copy 배열을 선언하여 오름차순으로 정렬한뒤 진행합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static int N;
public static int[] arr;
public static int[] copy;
public static HashMap<Integer, Integer> hashmap = new HashMap<>();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr = new int[N];
copy = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
arr[i] = Integer.parseInt(st.nextToken());
copy[i] = arr[i];
}
Arrays.sort(copy);
int rank = 0;
for(int i=0;i<copy.length;i++) {
if(!hashmap.containsKey(copy[i])) {
hashmap.put(copy[i], rank);
rank++;
}
}
StringBuilder sb = new StringBuilder();
for(int value: arr) {
sb.append(hashmap.get(value)).append(' ');
}
System.out.println(sb.toString());
}
}
Arrays.copyOfRange 함수를 활용하여 얕은복사를 진행한 코드입니다.
package Main;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Main {
static int N, M, S, P, K, A, B, X;
static int answer = 0;
static int[] arr;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr = new int[N];
st = new StringTokenizer(br.readLine());
for(int i=0;i<N;i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int[] sortedArr = Arrays.copyOfRange(arr, 0, arr.length);
Arrays.sort(sortedArr);
HashMap<Integer, Integer> hashmap = new HashMap<Integer, Integer>();
for(int i=0, rank = 0;i<N;i++) {
if(!hashmap.containsKey(sortedArr[i])) {
hashmap.put(sortedArr[i], rank++);
}
}
for(int i=0;i<N; i++) {
sb.append(hashmap.get(arr[i]) + " ");
}
System.out.println(sb);
}
}
'알고리즘 > 해시를 사용한 집합과 맵' 카테고리의 다른 글
[백준] 14425 문자열 집합 - HashSet(해시셋) JAVA (0) | 2024.03.26 |
---|---|
[백준] 11652 카드 - HashMap(해시맵) JAVA (0) | 2024.03.26 |
[백준] 1269 대칭 차집합 - HashSet(해시셋) JAVA (0) | 2024.03.25 |
[백준] 7785 회사에 있는 사람 - HashSet(해시셋) JAVA (0) | 2024.03.25 |
[백준] 20291 파일 정리 - 정규표현식(RegularExpression) + HashMap(해시맵) + TreeMap(트리맵) JAVA (0) | 2023.10.08 |