Menu
Coddy logo textTech

쌍 삭제하기

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

때로는 해시 맵에서 데이터를 완전히 제거해야 할 때가 있습니다. Rust는 키를 지정하여 키-값 쌍을 삭제하는 .remove() 메서드를 제공합니다:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// "apples" 항목을 완전히 제거합니다
inventory.remove("apples");

.remove() 메서드는 키를 매개변수로 받아 해시 맵에서 키와 그에 연관된 값을 모두 제거합니다. .remove("apples")를 호출한 후, "apples"를 조회하려고 하면 None이 반환됩니다.

많은 해시 맵 연산들과 마찬가지로, .remove()Option을 반환합니다. 키가 존재했다면 삭제된 값을 포함하는 Some(value)를 반환하고, 키를 찾지 못했다면 None을 반환합니다:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

이 반환 값은 삭제가 성공했는지 여부를 알려주며, 삭제된 값에 접근할 수 있게 해줍니다. 이는 로깅이나 정리 작업에 유용할 수 있습니다.

challenge icon

챌린지

쉬움

인벤토리의 아이템 개수를 나타내는 정수 n을 입력받습니다. 그런 다음 n 쌍의 입력(아이템 이름과 정수 형태의 수량)을 받습니다. 그 후, 인벤토리에서 삭제할 아이템 이름을 하나 더 입력받습니다. 인벤토리를 저장할 해시 맵을 생성하고, 모든 아이템을 삽입한 뒤, 지정된 아이템을 삭제하고 삭제 결과와 남은 인벤토리를 출력하세요.

요구 사항:

  • std::collections에서 HashMap을 가져옵니다.
  • HashMap<String, i32> 타입의 가변(mutable) 해시 맵을 생성합니다.
  • 첫 번째 입력을 읽고 i32로 변환하여 아이템 개수를 가져옵니다.
  • 루프를 사용하여 n 쌍의 입력(아이템 이름, 수량 순)을 읽습니다.
  • 각 아이템과 수량을 해시 맵에 삽입합니다.
  • 삭제할 아이템 이름으로 입력을 하나 더 읽습니다.
  • 해시 맵에서 아이템을 삭제하기 위해 .remove()를 사용합니다.
  • .remove()가 반환하는 Option을 처리하기 위해 match를 사용합니다.
  • 아이템을 찾아 삭제한 경우, Removed [quantity] [item_name]를 출력합니다.
  • 아이템을 찾지 못한 경우, [item_name] not found를 출력합니다.
  • 삭제 처리가 끝난 후, 남은 해시 맵을 순회하며 각 아이템을 [item_name]: [quantity] 형식으로 출력합니다.

입력:

  • 첫 번째 줄: 정수 n (예: 3)
  • 다음 n 쌍의 줄:
    • 아이템 이름 (예: apples)
    • 정수 형태의 수량 (예: 50)
  • 마지막 줄: 삭제할 아이템 이름 (예: bananas)

출력:

  • 첫 번째 줄: Removed [quantity] [item_name] 또는 [item_name] not found 중 하나
  • 다음 줄들: 남은 각 아이템에 대해 [item_name]: [quantity] 형식으로 한 줄씩 출력
  • 남은 아이템의 출력 순서는 테스트 실행마다 다를 수 있습니다.

치트 시트

해시 맵에서 키-값 쌍을 제거하려면, 키를 매개변수로 사용하는 .remove() 메서드를 사용하세요:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

inventory.remove("apples");

.remove() 메서드는 Option을 반환합니다. 키가 존재했다면 Some(value)를, 찾지 못했다면 None을 반환합니다:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

직접 해보기

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

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // 아이템의 개수를 읽습니다
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // 인벤토리를 저장할 가변 해시 맵을 생성합니다
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // n개의 입력 쌍(아이템 이름과 수량)을 읽습니다
    for _ in 0..n {
        let item_name = lines.next().unwrap().unwrap().trim().to_string();
        let quantity: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
        
        // TODO: 아이템과 수량을 해시 맵에 삽입하세요
    }
    
    // 삭제할 아이템 이름을 읽습니다
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: 해시 맵에서 아이템을 삭제하고 match를 사용하여 결과를 처리하세요
    // 삭제 결과 출력 ("Removed [quantity] [item_name]" 또는 "[item_name] not found" 중 하나)
    
    // TODO: 남은 인벤토리를 반복하여 각 아이템을 "[item_name]: [quantity]" 형식으로 출력하세요
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨