하나로 합치기
Coddy Rust 여정의 Logic & Flow 섹션에 포함된 레슨 — 66개 중 53번째.
챌린지
쉬움여섯 개의 입력을 받게 됩니다. 첫 번째 입력은 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 stockPrice: $[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 inventoryPrice: $[price]Quantity: 0
check명령어의 경우 (품목이 존재함):[item_name] is in stockPrice: $[price]Quantity: [quantity]
check명령어의 경우 (품목이 존재하지 않음):[item_name] is not in stocksell명령어의 경우 (재고가 충분함):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에 따라 적절한 메시지를 출력해야 함을 기억하세요
}