요소 제거하기
Coddy Rust 여정의 논리와 흐름 섹션에 포함된 레슨. 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()를 사용하면 삭제된 인덱스 뒤의 모든 요소가 빈자리를 채우기 위해 왼쪽으로 이동합니다. 시작 부분이나 중간에서 요소를 삭제하면 많은 요소를 이동해야 하므로, 벡터가 큰 경우 이 작업은 더 느릴 수 있습니다.
두 방법 모두 벡터의 내용을 수정하므로 벡터가 변경 가능해야 합니다. 끝에서 항목을 제거하려면 .pop()을 선택하고, 특정 위치에서 항목을 제거해야 한다면 .remove()를 선택하세요.
챌린지
쉬움두 개의 입력을 받습니다. 첫 번째는 쉼표로 구분된 숫자 목록이고, 두 번째는 제거할 인덱스입니다. 시작 코드에서는 이미 두 입력을 읽고 숫자들을 변경 가능한 벡터 numbers로 변환합니다. 지정된 인덱스의 요소를 제거하고 남은 요소를 각각 별도의 줄에 출력하세요.
요구 사항:
- 두 번째 입력(
index_input)을 인덱스를 나타내는 정수로 변환합니다. .remove()를 사용하여 해당 인덱스의 요소를 제거합니다.- 남은 각 요소를 별도의 줄에 출력합니다.
입력:
- 첫 번째 줄: 쉼표로 구분된 정수(예:
10,20,30,40,50) - 두 번째 줄: 제거할 인덱스를 나타내는 정수
출력: 벡터의 남은 각 요소를 별도의 줄에 출력합니다.
직접 해보기
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");
// "10,20,30"을 벡터로 변환합니다: 쉼표를 기준으로 나누고, 각 부분을 파싱한 뒤, Vec에 수집합니다
let mut numbers: Vec<i32> = numbers_input
.trim()
.split(',')
.map(|s| s.trim().parse().unwrap())
.collect();
// TODO: 아래에 코드를 작성하세요
// 1. index_input을 정수로 변환하세요
// 2. 지정된 인덱스의 요소를 제거하세요
// 3. 남은 각 요소를 별도의 줄에 출력하세요
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Rust 컴파일러