🔺 문제
18870번: 좌표 압축
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌
www.acmicpc.net
🔺 코드
- 시간 초과 풀이
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
var br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
var st = new StringTokenizer(br.readLine(), " ");
for(int i=0 ; i < n ; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
int[] cnt = new int [n];
for(int i=0 ; i < n ; i++) {
for(int j=0 ; j < n ; j++) {
if(i!=j && arr[i] > arr[j])
cnt[i]++;
}
}
for(int i : cnt) {
System.out.print(i + " ");
}
}
}
중복을 생각하지 못 해 답을 틀림ㅎ

- 정답
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
var br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] origin = new int[n];
var st = new StringTokenizer(br.readLine(), " ");
for(int i=0 ; i < n ; i++) {
origin[i] = Integer.parseInt(st.nextToken());
}
int[] sorted = origin.clone();
Arrays.sort(sorted);
HashMap<Integer, Integer> map = new HashMap<>();
int rank = 0;
for(int i=0 ; i < n ; i++) {
if(!map.containsKey(sorted[i]))
map.put(sorted[i], rank++);
}
var sb = new StringBuilder();
for(int i : origin) {
sb.append(map.get(i)).append(' ');
}
System.out.println(sb);
}
}
✅ 해결 아이디어
- 좌표 압축 : 각 원소의 순위를 매기는 문제
- Map 사용해 <좌표값, 좌표값의 최소 인덱스> 저장 (HashMap - 중복 제거)
- map에 이미 존재하는 좌표라면 무시. 아니라면 좌표값과 순위 저장

(참고)
✔ 풀이
[백준] 18870번 : 좌표 압축 - JAVA [자바]
https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다
st-lab.tistory.com
[백준] 18870번: 좌표 압축 - JAVA
🔗 문제 링크 BOJ 18870번: 좌표 압축 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서
girawhale.tistory.com
[백준알고리즘-JAVA]18870번 풀이(좌표 압축) - 초보도 이해하는 풀이
안녕하세요 인포돈 입니다. 백준 알고리즘 18870번 풀이입니다. * 참고사항 - 개발환경은 eclipse을 기준으로 작성되었습니다. - java언어를 이용하여 문제를 풀이합니다. - 알고리즘 문제는 풀이를
infodon.tistory.com
'코테 > 백준' 카테고리의 다른 글
[백준/JAVA] 4779번: 칸토어 집합 (0) | 2023.03.23 |
---|---|
[백준/JAVA] 24060번: 알고리즘 수업 - 병합 정렬 1 (0) | 2023.03.23 |
[백준/JAVA] 10814번: 나이순 정렬 (0) | 2023.03.22 |
[백준/JAVA] 1181번: 단어 정렬 (0) | 2023.03.21 |
[백준/JAVA] 11651번: 좌표 정렬하기 2 (0) | 2023.03.21 |