러스트를 연습하려고 풀어본 문제인데 풀고보니 match 표현식을 활용해봤으면 더 좋았을거 같습니다.
문제 링크
https://www.acmicpc.net/problem/17413
풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
use std::io::{self};
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input);
// <를 찾으면 true
let mut is_angle = false;
let mut tmp_word = String::new();
let mut answer = String::new();
for ch in input.chars() {
if ch == '<' {
is_angle = true;
if tmp_word.len() == 0 {
answer.push(ch);
continue;
} else {
let converted = reverse_word(&mut tmp_word);
answer.push_str(&converted);
answer.push('<');
tmp_word = String::new();
continue;
}
}
if ch == '>' {
answer.push(ch);
is_angle = false;
continue;
}
// 꺽쇠 안에 있는 단어들은 뒤집지 않으므로
if is_angle {
answer.push(ch);
continue;
}
// rust stdin 특성상 마지막은 줄바꿈 문자임
if ch == ' ' || ch == '\n' {
if tmp_word.len() > 0 {
let converted = reverse_word(&mut tmp_word);
answer.push_str(&converted);
answer.push(' ');
tmp_word = String::new();
} else { // 공백이 이어지는 경우
answer.push(' ');
}
} else {
tmp_word.push(ch);
}
}
println!("{}", answer);
}
fn reverse_word(word: &mut String) -> String {
let word_byte = word.as_bytes();
let mut converted = String::new();
for i in (0..word.len()).rev() {
converted.push(word_byte[i] as char);
}
converted
}
|
cs |
'알고리즘' 카테고리의 다른 글
백준 12933번 오리 Rust 풀이 (0) | 2021.10.11 |
---|---|
백준 14467번 Rust 풀이 (0) | 2021.10.10 |
백준 1913번 달팽이 Rust 풀이 (0) | 2021.10.10 |
카카오 인턴십 표 편집 (Python) (0) | 2021.08.21 |
백준 사회망 서비스(Python/Go) (0) | 2021.04.15 |