Menu
Coddy logo textTech

요소 제거하기

Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 13번째.

때로는 벡터에 요소를 추가하는 것뿐만 아니라 제거해야 할 때도 있습니다. Rust는 요소를 제거하기 위한 두 가지 주요 메서드를 제공하며, 각각은 서로 다른 상황에 맞게 설계되었습니다.

.pop() 메서드는 벡터에서 마지막 요소를 제거하고 반환합니다:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // 40을 제거하고, Some(40)을 반환합니다
// numbers는 이제 [10, 20, 30]입니다

.pop()Option을 반환한다는 점에 유의하세요. 제거할 요소가 있으면 Some(value)를, 벡터가 이미 비어 있으면 None을 반환합니다. 이 덕분에 비어 있는 벡터에서도 안전하게 사용할 수 있습니다.

.remove() 메서드는 특정 인덱스의 요소를 제거하고 그 요소를 반환합니다:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // "banana"를 제거합니다
// fruits는 이제 ["apple", "cherry"]입니다

.remove()를 사용할 때, 삭제된 인덱스 이후의 모든 요소들이 빈 공간을 채우기 위해 왼쪽으로 이동합니다. 시작 부분이나 중간에서 삭제할 경우, 많은 요소들을 이동시켜야 하므로 큰 벡터에서는 이 작업이 느려질 수 있습니다.

두 메서드 모두 내용물을 수정하므로 벡터가 가변적(mutable)이어야 합니다. 끝에서 요소를 제거하려면 .pop()을 선택하고, 특정 위치에서 제거해야 한다면 .remove()를 선택하세요.

challenge icon

챌린지

쉬움

두 개의 입력을 받게 됩니다: 첫 번째는 쉼표로 구분된 숫자 목록이고, 두 번째는 삭제할 인덱스입니다. 두 입력을 모두 읽고, 숫자들로 벡터를 생성한 다음, 지정된 인덱스의 요소를 제거하고 남은 요소들을 각각 별도의 줄에 출력하세요.

요구 사항:

  • 쉼표로 구분된 숫자가 포함된 첫 번째 입력을 읽습니다 (예: 10,20,30,40,50)
  • 문자열을 쉼표로 분리하고 각 숫자를 정수로 변환합니다
  • 이 숫자들로 가변(mutable) 벡터를 생성합니다
  • 두 번째 입력을 읽고 이를 인덱스를 나타내는 정수로 변환합니다
  • .remove()를 사용하여 해당 인덱스의 요소를 제거합니다
  • 남은 각 요소를 별도의 줄에 출력합니다

입력:

  • 첫 번째 줄: 쉼표로 구분된 정수들 (예: 10,20,30,40,50)
  • 두 번째 줄: 삭제할 인덱스를 나타내는 정수

출력: 벡터의 남은 각 요소를 별도의 줄에 출력합니다

치트 시트

Rust는 벡터에서 요소를 제거하기 위한 두 가지 주요 메서드를 제공합니다:

.pop() 메서드는 마지막 요소를 제거하고 반환합니다:

let mut numbers = vec![10, 20, 30, 40];
let last = numbers.pop(); // 40을 제거하고 Some(40)을 반환합니다
// numbers는 이제 [10, 20, 30]입니다

.pop()Option 타입을 반환합니다. 요소가 제거된 경우 Some(value)를, 벡터가 비어 있는 경우 None을 반환합니다.

.remove() 메서드는 특정 인덱스의 요소를 제거하고 반환합니다:

let mut fruits = vec!["apple", "banana", "cherry"];
let removed = fruits.remove(1); // "banana"를 제거합니다
// fruits는 이제 ["apple", "cherry"]입니다

.remove()를 사용할 때, 제거된 인덱스 이후의 모든 요소는 빈 자리를 채우기 위해 왼쪽으로 이동합니다.

두 메서드 모두 벡터가 가변(mutable)이어야 합니다. 끝에서 요소를 제거하려면 .pop()을 사용하고, 특정 위치에서 제거하려면 .remove()를 사용하세요.

직접 해보기

use std::io;

fn main() {
    // 쉼표로 구분된 숫자들을 읽습니다
    let mut numbers_input = String::new();
    io::stdin().read_line(&mut numbers_input).expect("Failed to read line");
    
    // 삭제할 인덱스를 읽습니다
    let mut index_input = String::new();
    io::stdin().read_line(&mut index_input).expect("Failed to read line");
    
    // TODO: 아래에 코드를 작성하세요
    // 1. numbers_input을 쉼표로 분리하고 정수로 변환합니다
    // 2. 이 숫자들로 가변 벡터(mutable vector)를 생성합니다
    // 3. index_input을 정수로 변환합니다
    // 4. 지정된 인덱스의 요소를 제거합니다
    // 5. 남은 각 요소를 별도의 줄에 출력합니다
    
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨