[백준] 18870번 좌표 압축 Java 문제 풀이
2023. 2. 17. 12:09ㆍ알고리즘/백준
728x90
반응형
문제풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
interface Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
AtomicInteger idx = new AtomicInteger();
String[] arr = br.readLine().split(" ");
Map<Integer, Integer> map = Arrays.stream(arr).mapToInt(Integer::parseInt).boxed().sorted().distinct().collect(Collectors.toMap(s->s, s->idx.getAndIncrement(), (s1, s2)->s1,LinkedHashMap::new));
for(int i=0; i<arr.length; i++) {
sb.append(map.get(Integer.parseInt(arr[i])) + " ");
}
System.out.println(sb);
}
}
가장 작은 값이 0이고 그다음 수는 1, 2, ... 이렇게 하면 되는 문제입니다.
둘째 줄에 입력받은 수를 배열로 받아서 map으로 변환했습니다.
key는 입력받은 숫자, value는 AtomicInteger 이란 걸 사용했는데 더 가벼운 게 있을 거 같은데 검색하다가 이걸로 구현해 봤습니다.
정렬과 중복제거를 한 다음, LinkedHashMap으로 받기 때문에 입력 순서가 보장되어 idx.getAndIncrement()를 하게 되면 0, 1, 2, ... 이렇게 값이 들어갑니다.
아까 입력받은 배열 값이 map의 key에 해당하므로 배열을 순회하며 출력하면 끝입니다.
출처 : https://www.acmicpc.net/problem/18870
728x90
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 25314번 코딩은 체육과목 입니다 Java 문제 풀이 (0) | 2023.03.13 |
---|---|
[백준] 11382번 꼬마 정민 Java 문제 풀이 (0) | 2023.03.13 |
[백준] 2108번 통계학 Java 문제 풀이 (0) | 2023.02.17 |
[백준] 2563번 색종이 Java 문제 풀이 (0) | 2023.01.30 |
[백준] 2566번 최댓값 Java 문제 풀이 (0) | 2023.01.30 |