[1. 개요]
알고리즘 문제 풀이 시, Rust 로 작성 하는 경우, 기본 골격이 되는 코드 구조 정리
[2. 예시-01]
한줄의 입력에서 세개의 숫자를 읽고 그 숫자들의 합을 출력하는 문제
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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(); | |
} |
[3. 예시-02]
2줄에서 2개의 숫자를 읽고, 그 합을 출력
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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(); | |
} |
[3. 예시-03]
EOF 를 만날 때 까지, 입력 스트림으로 부터 데이터 읽어들이고 출력
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | |
}, | |
}; | |
} | |
} |
'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 |