Menu
Coddy logo textTech

제네릭 스택

Coddy Rust 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 59번째.

challenge icon

챌린지

쉬움

stack은 "Last In, First Out" (LIFO) 원칙을 따르는 기본적인 자료 구조입니다. 즉, 가장 마지막에 추가된 항목이 가장 먼저 제거됩니다. 접시 더미를 생각해 보세요. 접시는 위에 추가하고 위에서 제거합니다.

어떤 유형의 element든 저장할 수 있는 generic Stack 자료 구조를 만들어 봅시다! stack은 책 더미처럼 "Last In, First Out" 원칙을 따르며, 위에서만 추가하거나 제거할 수 있습니다.

코드는 두 개의 파일로 구성합니다.

  • stack.rs: 요소를 내부적으로 저장하기 위해 Vec<T>를 사용하는 generic Stack<T> structDefine합니다. 빈 stack을 만드는 new, 위에 요소를 추가하는 push, 그리고 맨 위 요소를 제거하고 반환하는 pop의 세 가지 methodsImplement하세요. stack이 비어 있을 수 있으므로 반환 유형은 Option<T>입니다.
  • main.rs: stack 모듈을 가져오고 Stack이 integers와 함께 작동하는 모습을 보여 줍니다. stack을 Create하고, 제공된 numbers를 stack에 push한 다음, 요소를 꺼내 각각 print하세요. pop이 반환하는 Optionhandle하려면 unwrap_or를 사용하세요. stack이 비어 있는 경우 기본값으로 -1을 사용합니다.

stack에는 두 가지 필수 연산이 있습니다.

  • push: stack의 맨 위에 요소를 추가합니다
  • pop: 맨 위 요소를 제거하고 반환합니다

pop method는 stack이 비어 있을 수 있으므로 Option<T>를 반환해야 합니다. Vec type에는 이미 Option<T>를 반환하는 pop method가 있으므로, 이를 구현에서 활용할 수 있습니다.

stack은 다음과 같이 작동해야 합니다. 값 10, 20, 30을 이 순서로 push하면, 세 번 pop할 때 30, 20, 10이 나와야 합니다(역순). 빈 stack에서 네 번째 pop을 수행하면 기본값이 반환되어야 합니다.

각각의 꺼낸 값을 한 줄씩 print하세요.

30
20
10
-1

예를 들어 입력이 5, 15, 25인 경우:

25
15
5
-1

세 개의 입력을 받습니다. 즉, stack에 push할 세 개의 integers이며 각각을 i32parse합니다. 세 값을 모두 push한 후 네 번 pop하여 성공적인 pop과 빈 stack의 경우를 모두 보여 줍니다.

직접 해보기

mod stack;

use stack::Stack;

fn main() {
    // 입력에서 세 개의 정수를 읽습니다
    let mut input1 = String::new();
    std::io::stdin().read_line(&mut input1).expect("Failed to read line");
    let num1: i32 = input1.trim().parse().expect("Invalid number");

    let mut input2 = String::new();
    std::io::stdin().read_line(&mut input2).expect("Failed to read line");
    let num2: i32 = input2.trim().parse().expect("Invalid number");

    let mut input3 = String::new();
    std::io::stdin().read_line(&mut input3).expect("Failed to read line");
    let num3: i32 = input3.trim().parse().expect("Invalid number");

    // TODO: 새로운 Stack 생성

    // TODO: 세 숫자를 스택에 푸시 (num1, num2, num3 순서대로)

    // TODO: 네 번 팝하고 각 결과를 출력
    // 빈 스택 경우를 처리하기 위해 unwrap_or(-1) 사용
}

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Rust 컴파일러