요소 제거하기
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()를 선택하세요.
챌린지
쉬움두 개의 입력을 받게 됩니다: 첫 번째는 쉼표로 구분된 숫자 목록이고, 두 번째는 삭제할 인덱스입니다. 두 입력을 모두 읽고, 숫자들로 벡터를 생성한 다음, 지정된 인덱스의 요소를 제거하고 남은 요소들을 각각 별도의 줄에 출력하세요.
요구 사항:
- 쉼표로 구분된 숫자가 포함된 첫 번째 입력을 읽습니다 (예:
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. 남은 각 요소를 별도의 줄에 출력합니다
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.