본문 바로가기

컴퓨터 과학/자료구조, 알고리즘

[Rust로 백준 하루 하나] 16-9. 덱 2

문제 (28279번)

정수를 저장하는 덱을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여덟 가지이다.

 

  1. 1 X: 정수 X를 덱의 앞에 넣는다. (1 ≤ X ≤ 100,000)
  2. 2 X: 정수 X를 덱의 뒤에 넣는다. (1 ≤ X ≤ 100,000)
  3. 3: 덱에 정수가 있다면 맨 앞의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  4. 4: 덱에 정수가 있다면 맨 뒤의 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.
  5. 5: 덱에 들어있는 정수의 개수를 출력한다.
  6. 6: 덱이 비어있으면 1, 아니면 0을 출력한다.
  7. 7: 덱에 정수가 있다면 맨 앞의 정수를 출력한다. 없다면 -1을 대신 출력한다.
  8. 8: 덱에 정수가 있다면 맨 뒤의 정수를 출력한다. 없다면 -1을 대신 출력한다.

 

입력

첫째 줄에 명령의 수 N이 주어진다. (1 ≤ N ≤ 1,000,000)

 

둘째 줄부터 N개 줄에 명령이 하나씩 주어진다.

 

출력을 요구하는 명령은 하나 이상 주어진다.

 

출력

출력을 요구하는 명령이 주어질 때마다 명령의 결과를 한 줄에 하나씩 출력한다.


풀이

코드

use std::io::{self, BufReader, BufRead, BufWriter, Write};
use std::collections::VecDeque;

fn main() {
    let mut reader = BufReader::new(io::stdin().lock());
    let mut writer = BufWriter::new(io::stdout().lock());

    let mut n = String::new();
    reader.read_line(&mut n).unwrap();
    let n: usize = n.trim().parse().unwrap();

    let mut output: VecDeque<i32> = VecDeque::new();
    let mut input = String::new();
    for _ in 0..n {
        reader.read_line(&mut input).unwrap();
        let mut input_iter = input
            .trim()
            .split_whitespace();
        let inst = input_iter.next().unwrap();
        match inst {
            "1" => {
                let x = input_iter.next().unwrap().parse::<i32>().unwrap();
                output.push_front(x);
            },
            "2" => {
                let x = input_iter.next().unwrap().parse::<i32>().unwrap();
                output.push_back(x);
            },
            "3" => {
                if let Some(x) = output.pop_front() {
                    writeln!(writer, "{x}").unwrap();
                } else {
                    writeln!(writer, "-1").unwrap();
                }
            },
            "4" => {
                if let Some(x) = output.pop_back() {
                    writeln!(writer, "{x}").unwrap();
                } else {
                    writeln!(writer, "-1").unwrap();
                }
            },
            "5" => writeln!(writer, "{}", output.len()).unwrap(),
            "6" => {
                if output.len() == 0 {
                    writeln!(writer, "1").unwrap();
                } else {
                    writeln!(writer, "0").unwrap();
                }
            },
            "7" => {
                if output.len() != 0 {
                    writeln!(writer, "{}", output[0]).unwrap();
                } else {
                    writeln!(writer, "-1").unwrap();
                }
            },
            "8" => {
                if output.len() != 0 {
                    writeln!(writer, "{}", output[output.len()-1]).unwrap();
                } else {
                    writeln!(writer, "-1").unwrap();
                }
            },
            _ => (),
        }
        input.clear();
    }
}

 

해설

특이사항 없음


추가 학습

  • 특이사항 없음