본문 바로가기
알고리즘

백준 12933번 오리 Rust 풀이

by PudgeKim 2021. 10. 11.

역시 rust에 익숙해지고자 백준 구현 문제를 풀어봤습니다.

실버4 치고는 생각보다 꽤 까다로운 문제였습니다.

문제 링크
https://www.acmicpc.net/problem/12933

 

12933번: 오리

첫째 줄에 영선이가 녹음한 소리가 주어진다. 소리의 길이는 5보다 크거나 같고, 2500보다 작거나 같은 자연수이고, 'q','u','a','c','k'로만 이루어져 있다.

www.acmicpc.net

 

풀이

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
65
66
67
68
69
use std::io::{self};
use std::process;
 
fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).unwrap();
 
    let mut visited = vec![0; input.len()];
    let mut cnt = 0;
    let mut is_true = false;
    let mut answer = 0;
    while cnt < input.len()-1 {
        is_true = check(&mut input, &mut visited, &mut cnt);
 
        // 중간에 틀리면 즉시 프로그램 종료
        if !is_true {
            println!("{}"-1);
            process::exit(0);
        } else {
            answer += 1;
        }
    }
 
    println!("{}", answer);
 
}
 
fn check(input: &mut String, visited: &mut Vec<i32>, cnt: &mut usize) -> bool {
    // q, u, a, c, k 순서대로 찾아야하므로 순서에 맞게 바뀜
    let target_list = ['q''u''a''c''k'];
    let mut target_idx: usize = 0;
    let mut idx = 0;
 
    // cnt가 바뀌지 않았어도 false를 return해야하므로
    let prev_cnt: usize = *cnt;
 
    for ch in input.chars() {
        // rust 특성상 마지막에 줄바꿈 들어감
        if ch == '\n' {
            idx += 1;
            continue;
        }
        // 이미 방문햇으면 넘어감
        if visited[idx] == 1 {
            idx += 1;
            continue;
        }
 
        if ch == target_list[target_idx] {
            visited[idx] = 1;
            target_idx = (target_idx+1) % 5;
            // cnt는 for문이 끝나면 5의 배수여야 한다. (quack이 5글자니까)
            *cnt += 1;
        }
 
        idx += 1;
    }
 
    if *cnt % 5 != 0 {
        return false;
    }
    // cnt가 바뀌지 않은 경우
    if *cnt == prev_cnt {
        return false;
    }
 
    return true;
}
 
cs

'알고리즘' 카테고리의 다른 글

백준 17413번 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