Menu
Coddy logo textTech

기타 슬라이스

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

문자열 슬라이스는 매우 유용하지만, 슬라이싱은 문자열에만 국한되지 않습니다. Rust의 슬라이스 개념은 모든 요소 시퀀스로 확장되어, 소유권을 가져오지 않고도 컬렉션을 다룰 수 있는 강력한 도구가 됩니다.

문자열에서 배웠던 것과 동일한 구문을 사용하여 배열과 벡터로부터 슬라이스를 생성할 수 있습니다. 예를 들어, 숫자 배열이 있는 경우 그 일부 또는 전체를 참조하는 슬라이스를 생성할 수 있습니다:

let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // 결과는 [2, 3, 4]입니다
let full_slice: &[i32] = &numbers;  // 전체 배열을 참조합니다

동일한 원리가 벡터에도 적용됩니다. 데이터를 이동하거나 복사하지 않고 데이터의 일부를 작업하기 위해 벡터에서 슬라이스를 생성할 수 있습니다:

let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // 이것은 [10, 20]을 제공합니다
challenge icon

챌린지

쉬움

세 개의 입력을 받게 됩니다. 첫 번째 입력은 쉼표로 구분된 숫자 목록입니다. 두 번째 입력은 슬라이스를 생성하기 위한 시작 및 끝 인덱스를 나타내는 공백으로 구분된 두 숫자입니다. 세 번째 입력은 슬라이스에서 액세스할 인덱스를 나타내는 단일 숫자입니다.

쉼표로 구분된 숫자들로부터 벡터를 생성한 다음, 지정된 범위를 사용하여 슬라이스를 생성하세요. 슬라이스에서 주어진 인덱스에 있는 요소에 액세스하여 출력하세요.

요구 사항:

  • 첫 번째 입력(쉼표로 구분된 숫자)을 읽고 공백을 제거합니다.
  • 입력을 쉼표로 분할하고 각 숫자를 i32로 파싱합니다.
  • 이 숫자들로 벡터를 생성합니다.
  • 두 번째 입력(공백으로 구분된 두 숫자)을 읽고 공백을 제거합니다.
  • 두 번째 입력을 공백으로 분할하여 시작 및 끝 인덱스를 가져옵니다.
  • 두 인덱스를 usize로 파싱합니다.
  • 범위 구문 &vec[start..end]을 사용하여 벡터로부터 슬라이스를 생성합니다.
  • 세 번째 입력(액세스할 인덱스)을 읽고 공백을 제거합니다.
  • 인덱스를 usize로 파싱합니다.
  • 슬라이스에서 지정된 인덱스의 요소에 액세스합니다.
  • 액세스한 요소를 출력합니다.

입력:

  • 첫 번째 줄: 쉼표로 구분된 숫자 (예: 10,20,30,40,50)
  • 두 번째 줄: 공백으로 구분된 두 숫자 (예: 1 4)
  • 세 번째 줄: 인덱스 번호 (예: 2)

출력:

  • 슬라이스의 지정된 인덱스에 있는 요소

치트 시트

슬라이스는 문자열뿐만 아니라 배열과 벡터에서도 생성할 수 있습니다. 슬라이스는 소유권을 가져오지 않고 컬렉션의 일부를 참조합니다.

배열에서 슬라이스 생성하기:

let numbers = [1, 2, 3, 4, 5];
let slice: &[i32] = &numbers[1..4]; // [2, 3, 4]를 참조합니다
let full_slice: &[i32] = &numbers;  // 전체 배열을 참조합니다

벡터에서 슬라이스 생성하기:

let mut vec = vec![10, 20, 30, 40];
let vec_slice: &[i32] = &vec[0..2]; // [10, 20]을 참조합니다

슬라이스는 문자열 슬라이스와 동일한 범위 구문을 사용하며, 데이터를 이동하거나 복사하지 않고 데이터의 일부를 작업할 수 있게 해줍니다.

직접 해보기

use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // 첫 번째 입력 읽기 (쉼표로 구분된 숫자들)
    let first_input = lines.next().unwrap().unwrap();
    
    // 두 번째 입력 읽기 (시작 및 끝 인덱스)
    let second_input = lines.next().unwrap().unwrap();
    
    // 세 번째 입력 읽기 (접근할 인덱스)
    let third_input = lines.next().unwrap().unwrap();
    
    // TODO: 아래에 코드를 작성하세요
    // 쉼표로 구분된 숫자들을 파싱하여 벡터 생성
    // 시작 및 끝 인덱스 파싱
    // 벡터로부터 슬라이스 생성
    // 슬라이스에서 지정된 인덱스의 요소에 접근
    
    // 결과 출력
    // println!("{}", result);
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨