Menu
Coddy logo textTech

하나로 합치기

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

challenge icon

챌린지

쉬움

여섯 개의 입력을 받게 됩니다. 첫 번째 입력은 add, check, 또는 sell 중 하나인 명령어입니다. 두 번째 입력은 품목 이름입니다. 세 번째 입력은 판매할 수량(sell 명령어의 경우) 또는 초기 가격(add 명령어의 경우)을 나타내는 숫자입니다. 네 번째 입력은 인벤토리에 있는 품목 이름들의 쉼표로 구분된 리스트입니다. 다섯 번째 입력은 각 품목에 대응하는 가격들의 쉼표로 구분된 리스트입니다. 여섯 번째 입력은 각 품목에 대응하는 수량들의 쉼표로 구분된 리스트입니다.

품목 추가, 재고 확인, 품목 판매의 세 가지 작업을 모두 처리하는 완전한 인벤토리 관리 시스템을 구축하세요. 키는 품목 이름이고 값은 가격과 수량을 포함하는 튜플 (f64, i32)HashMap을 사용하여 인벤토리 데이터를 저장하세요.

요구 사항:

  • std::collections에서 HashMap을 임포트합니다.
  • 첫 번째 입력(명령어)을 읽고 공백을 제거합니다.
  • 두 번째 입력(품목 이름)을 읽고 공백을 제거합니다.
  • 세 번째 입력(수량/가격 값)을 읽고 공백을 제거합니다.
  • 세 번째 입력을 f64로 파싱합니다.
  • 네 번째 입력(쉼표로 구분된 품목 이름들)을 읽고 공백을 제거합니다.
  • 다섯 번째 입력(쉼표로 구분된 가격들)을 읽고 공백을 제거합니다.
  • 여섯 번째 입력(쉼표로 구분된 수량들)을 읽고 공백을 제거합니다.
  • 인벤토리를 위한 가변 HashMap<String, (f64, i32)>를 생성합니다.
  • 품목 이름들을 쉼표로 분리합니다.
  • 가격들을 쉼표로 분리하고 각각을 f64로 파싱합니다.
  • 수량들을 쉼표로 분리하고 각각을 i32로 파싱합니다.
  • 각 품목을 해당 가격 및 수량과 함께 튜플 형태로 인벤토리에 삽입합니다.
  • 명령어에 대해 match 표현식을 사용하여 수행할 작업을 결정합니다.
  • add 명령어의 경우:
    • .entry().or_insert()를 사용하여 품목이 존재하지 않는 경우 추가하며, 세 번째 입력을 가격으로 사용하고 0을 초기 수량으로 사용합니다.
    • 출력: Added [item_name] to inventory
    • 출력: Price: $[price]
    • 출력: Quantity: 0
  • check 명령어의 경우:
    • .get()을 사용하여 품목이 존재하는지 확인합니다.
    • match 표현식을 사용하여 Option을 처리합니다.
    • Some인 경우, 다음을 출력합니다:
      • [item_name] is in stock
      • Price: $[price]
      • Quantity: [quantity]
    • None인 경우, 다음을 출력합니다: [item_name] is not in stock
  • sell 명령어의 경우:
    • 세 번째 입력을 판매할 수량인 i32로 파싱합니다.
    • .get()을 사용하여 품목이 존재하는지 확인합니다.
    • match 표현식을 사용하여 Option을 처리합니다.
    • Some인 경우:
      • 현재 수량이 충분한지 확인합니다.
      • 충분하다면, 인벤토리를 새로운 수량으로 업데이트하고 다음을 출력합니다:
        • Sold [quantity_to_sell] [item_name]
        • Total: $[total_price]
        • Remaining stock: [new_quantity]
      • 충분하지 않다면, 다음을 출력합니다:
        • Insufficient stock for [item_name]
        • Available: [current_quantity]
    • None인 경우, 다음을 출력합니다: [item_name] is not in stock
  • 그 외의 모든 명령어에 대해 다음을 출력합니다: Invalid command

입력:

  • 첫 번째 줄: 명령어 (add, check, 또는 sell)
  • 두 번째 줄: 품목 이름 (예: Tablet)
  • 세 번째 줄: 숫자 (add의 경우 가격, sell의 경우 수량, check의 경우 무시됨)
  • 네 번째 줄: 쉼표로 구분된 품목 이름들 (예: Laptop,Mouse,Keyboard)
  • 다섯 번째 줄: 쉼표로 구분된 가격들 (예: 999.99,25.50,75.00)
  • 여섯 번째 줄: 쉼표로 구분된 수량들 (예: 15,50,30)

출력:

  • add 명령어의 경우:
    • Added [item_name] to inventory
    • Price: $[price]
    • Quantity: 0
  • check 명령어의 경우 (품목이 존재함):
    • [item_name] is in stock
    • Price: $[price]
    • Quantity: [quantity]
  • check 명령어의 경우 (품목이 존재하지 않음): [item_name] is not in stock
  • sell 명령어의 경우 (재고가 충분함):
    • Sold [quantity_to_sell] [item_name]
    • Total: $[total_price]
    • Remaining stock: [new_quantity]
  • sell 명령어의 경우 (재고가 부족함):
    • Insufficient stock for [item_name]
    • Available: [current_quantity]
  • sell 명령어의 경우 (품목이 존재하지 않음): [item_name] is not in stock
  • 유효하지 않은 명령어의 경우: Invalid command

직접 해보기

use std::collections::HashMap;
use std::io;

fn main() {
    // 입력 읽기
    let mut command = String::new();
    io::stdin().read_line(&mut command).expect("Failed to read line");
    let command = command.trim();
    
    let mut item_name = String::new();
    io::stdin().read_line(&mut item_name).expect("Failed to read line");
    let item_name = item_name.trim();
    
    let mut value_input = String::new();
    io::stdin().read_line(&mut value_input).expect("Failed to read line");
    let value_input = value_input.trim();
    
    let mut items_input = String::new();
    io::stdin().read_line(&mut items_input).expect("Failed to read line");
    let items_input = items_input.trim();
    
    let mut prices_input = String::new();
    io::stdin().read_line(&mut prices_input).expect("Failed to read line");
    let prices_input = prices_input.trim();
    
    let mut quantities_input = String::new();
    io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
    let quantities_input = quantities_input.trim();
    
    // 인벤토리 HashMap 생성
    let mut inventory: HashMap<String, (f64, i32)> = HashMap::new();
    
    // TODO: 아래에 코드를 작성하세요
    // 쉼표로 구분된 입력을 파싱하고 인벤토리를 채웁니다
    // match 표현식을 사용하여 command에 따라 add, check, sell 작업을 처리합니다
    // command에 따라 적절한 메시지를 출력해야 함을 기억하세요
    
}

Logic & Flow의 모든 레슨