본문 바로가기

Rust/기타 팁

Rust. 알고리즘 문제 풀이 기본 코드 구조

[1. 개요]

알고리즘 문제 풀이 시, Rust 로 작성 하는 경우, 기본 골격이 되는 코드 구조 정리


[2. 예시-01]

한줄의 입력에서 세개의 숫자를 읽고 그 숫자들의 합을 출력하는 문제

// read_line 을 사용하기 위함.
use std::io::{Write, BufRead};
fn main() {
// 빠른 입출력을 위한 코드
let stdout = std::io::stdout().lock();
let mut stdout = std::io::BufWriter::new(stdout);
let stdin = std::io::stdin().lock();
let mut stdin = std::io::BufReader::new(stdin);
// 수정 가능한 변수 설정
let mut result: usize = 0;
let mut input = String::new();
// 한줄을 읽고,
stdin.read_line(&mut input).unwrap();
// input.split() 보다, split_whitespace() 을 사용하도록 한다.
for data in input.split_whitespace() {
// unwrap() 은 Result<T> 가
// Ok<T> 인 경우, T 에 대응되는 값을 반환
// Err<E> 인 경우, panic 발생
//
// 입력을 적절한 형태로 변환하도록 한다.
result += data.parse::<usize>().unwrap();
}
// 결과 출력
writeln!(stdout, "{}", result).unwrap();
}
view raw 11382.rs hosted with ❤ by GitHub

[3. 예시-02]

2줄에서 2개의 숫자를 읽고, 그 합을 출력

use std::io::{Write, BufRead};
fn main() {
// 빠른 IO를 위한 준비
let stdin = std::io::stdin().lock();
let mut stdin = std::io::BufReader::new(stdin);
let stdout = std::io::stdout().lock();
let mut stdout = std::io::BufWriter::new(stdout);
let mut input = String::new();
stdin.read_line(&mut input).unwrap();
// 문자열 input 에는 개행문자가 포함되어 있다.
// 따라서, trim_end() 를 이용하여 마지막 공백문자(혹은 개행) 등을 제거하도록 한다.
let a = input.trim_end().parse::<u32>().unwrap();
// 문자열을 입력 받기 전, 사용한 버퍼를 비우도록 한다.
input.clear();
stdin.read_line(&mut input).unwrap();
let b = input.trim_end().parse::<u32>().unwrap();
let result = a+b;
writeln!(stdout, "{}", result).unwrap();
}
view raw 2558.rs hosted with ❤ by GitHub

[3. 예시-03]

EOF 를 만날 때 까지, 입력 스트림으로 부터 데이터 읽어들이고 출력

use std::io::BufRead;
use std::io::Write;
fn main() {
let stdin = std::io::stdin().lock();
let stdout = std::io::stdout().lock();
let mut stdin = std::io::BufReader::new(stdin);
let mut stdout = std::io::BufWriter::new(stdout);
let mut input = String::new();
loop {
input.clear();
let ret = stdin.read_line(&mut input);
// match 를 사용하여 흐름을 제어한다.
match ret {
Ok(t) => {
if t == 0 {
// If this function returns [Ok(0)], the stream has reached EOF.
break;
}
writeln!(stdout, "{}", input.trim()).unwrap();
},
Err(_) => {
// Error 인 경우
break;
},
};
}
}
view raw 11718.rs hosted with ❤ by GitHub

 

'Rust > 기타 팁' 카테고리의 다른 글

std::process::Command 관련  (0) 2023.12.26
ssh2 관련  (0) 2023.12.19
Rust. 프로젝트 구조  (0) 2023.12.11
Rust 전역 변수  (0) 2022.08.25
Rust io 성능에 대한 고찰  (0) 2022.08.23