18870번: 좌표 압축
https://www.acmicpc.net/problem/18870
# 코드
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[] origin = new int[n]; // 원본 배열
int[] sorted = new int[n]; // 정렬할 배열
HashMap<Integer, Integer> rankingMap = new HashMap<Integer, Integer>(); // rank를 매길 HashMap
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < n; i++) {
// 정렬할 배열과 원본 배열에 값을 저장
sorted[i] = origin[i] = Integer.parseInt(st.nextToken());
}
// 정렬할 배열에 대해 정렬 수행
Arrays.sort(sorted);
// 정렬된 배열을 순회하며 map에 저장
int rank = 0;
for(int v : sorted) {
// 원소가 중복되지 않을 때만 원소와 순위를 넣어줌
if(!rankingMap.containsKey(v)) {
rankingMap.put(v, rank);
rank++; // map에 넣고나면 다음 순위를 가리킬 수 있도록 1을 더해줌
}
}
for(int key : origin) {
int ranking = rankingMap.get(key); // 원본 배열 원소(key)에 대한 value(순위)를 가져옴
sb.append(ranking).append(" ");
}
System.out.println(sb);
br.close();
}
}
- 원본 배열과 정렬할 배열을 함께 생성하고 배열 정렬 이후 정렬 배열을 순회하며 HashMap에 원소와 순위를 넣어주면 되는 문제였다.
참고한 블로그는 아래이다. ( •̀ ω •́ )✧
[백준] 18870번 : 좌표 압축 - JAVA [자바]
https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다
st-lab.tistory.com
'코딩테스트 > 자바 문제풀이' 카테고리의 다른 글
[CLASS 3: 슬라이딩윈도우] 백준 30804 과일 탕후루 (0) | 2024.11.12 |
---|---|
[CLASS 3: BFS] 백준 21736 헌내기는 친구가 필요해 (0) | 2024.11.11 |
[CLASS 3: 브루트포스] 백준 18111 마인크래프트 (1) | 2024.11.09 |
[CLASS 3: BFS] 백준 11724 연결 요소의 개수 (0) | 2024.11.08 |
[CLASS 3: 이분탐색] 백준 2805 나무 자르기 (0) | 2024.11.07 |