백준 18870 - 좌표 압축[Rust]

[Silver II] 좌표 압축 - 18870

Posted by Hebi on April 12, 2023

백준 알고리즘

[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);
    }
}