백준 알고리즘
[Silver II] 좌표 압축 - 18870
성능 요약
메모리: 37552 KB, 시간: 696 ms
분류
정렬, 값 / 좌표 압축
문제 설명
수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다.
Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다.
X1, X2, ..., XN에 좌표 압축을 적용한 결과 X'1, X'2, ..., X'N를 출력해보자.
입력
첫째 줄에 N이 주어진다.
둘째 줄에는 공백 한 칸으로 구분된 X1, X2, ..., XN이 주어진다.
출력
첫째 줄에 X'1, X'2, ..., X'N을 공백 한 칸으로 구분해서 출력한다.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::io::{stdin, Read};
fn main() {
let mut input = String::new();
stdin().read_line(&mut input).unwrap();
let n: usize = input.trim().parse().unwrap();
input.clear();
stdin().read_line(&mut input).unwrap();
let vec: Vec<i32> = input.split_whitespace().map(|x| x.parse().unwrap()).collect();
let mut copy_vec = vec.clone();
copy_vec.sort_unstable();
copy_vec.dedup();
for i in vec {
let idx = match copy_vec.binary_search(&i) {
Ok(x) => x,
Err(x) => x,
};
print!("{} ", idx);
}
}