컴퓨터 과학/자료구조, 알고리즘
[Rust로 백준 하루 하나] 13-8. 좌표 정렬하기 2
sans2
2024. 9. 28. 09:52
문제 (11651번)
2차원 평면 위의 점 N개가 주어진다. 좌표를 y좌표가 증가하는 순으로, y좌표가 같으면 x좌표가 증가하는 순서로 정렬한 다음 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 점의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개의 줄에는 i번점의 위치 xi와 yi가 주어진다. (-100,000 ≤ xi, yi ≤ 100,000) 좌표는 항상 정수이고, 위치가 같은 두 점은 없다.
출력
첫째 줄부터 N개의 줄에 점을 정렬한 결과를 출력한다.
풀이
코드
use std::io::{self, BufRead, BufReader, BufWriter, Write};
#[derive(Debug)]
struct Point {
x: i32,
y: i32,
}
fn main() {
let mut reader = BufReader::new(io::stdin().lock());
let mut n = String::new();
reader.read_line(&mut n).unwrap();
let n: usize = n.trim().parse().unwrap();
let mut points: Vec<Point> = Vec::new();
let mut point = String::new();
for _ in 0..n {
point.clear();
reader.read_line(&mut point).unwrap();
let mut point_iter = point
.trim()
.split_whitespace()
.map(|p| p.parse::<i32>().unwrap());
let x = point_iter.next().unwrap();
let y = point_iter.next().unwrap();
let point = Point { x, y };
points.push(point);
}
points.sort_by(|a, b| {
if a.y != b.y {
a.y.cmp(&b.y)
} else {
a.x.cmp(&b.x)
}
});
let mut writer = BufWriter::new(io::stdout().lock());
for point in points {
writeln!(writer, "{} {}", point.x, point.y).unwrap();
}
}
해설
특이사항 없음
추가 학습
- 특이사항 없음