포스트 난이도: HOO_Junior
# 재고 관리 예제를 통한 Dictionary (딕셔너리) 사용법
아래의 예제코드는 재고 관리를 하는 상황을 통해서 Dictionary (딕셔너리) 사용방법과 선언된 클래스를 import 해서 가져와 사용하는 방법을 대해서 살펴볼 수 있다. 해당 문제의 유형이 나오는 이유는 데이터 처리에 대한 추론 능력을 살펴보기 위해서이다.
class InventoryManager:
def __init__(self):
self.inventory = {}
def add_product(self, product_id: str, name: str, quantity: int) -> bool:
if product_id in self.inventory:
self.inventory[product_id]['quantity'] += quantity
else:
self.inventory[product_id] = {'name': name, 'quantity': quantity}
return True
def remove_product(self, product_id: str, quantity: int) -> bool:
if product_id not in self.inventory:
return False
if self.inventory[product_id]['quantity'] <= quantity:
del self.inventory[product_id]
else:
self.inventory[product_id]['quantity'] -= quantity
return True
def check_stock(self, product_id: str) -> int | None:
if product_id not in self.inventory:
return None
return self.inventory[product_id]['quantity']
def products_to_restock (self, threshold: int) -> list[str]:
restock_list = []
for product_ids, info in self.inventory.items():
if info['quantity'] < threshold:
restock_list.append(product_ids)
restock_list.sort()
return restock_list
import os
import sys
import unittest
currentdir = os.path.dirname(os.path.abspath(__file__))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0, parentdir)
from solution import InventoryManager
class SolutionTests(unittest.TestCase):
def test1(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 100)
inventory.add_product("p2", "Bananas", 50)
inventory.add_product("p3", "Oranges", 30)
self.assertEqual(inventory.products_to_restock(4), ["p3"])
def test2(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 100)
inventory.add_product("p2", "Bananas", 50)
inventory.remove_product("p2", 6)
self.assertEqual(inventory.products_to_restock(6), [])
def test3(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 100)
inventory.add_product("p2", "Bananas", 50)
self.assertEqual(inventory.check_stock("p1"), 10)
self.assertEqual(inventory.check_stock("p2"), 5)
self.assertEqual(inventory.products_to_restock(7), ["p2"])
def test4(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 16)
inventory.add_product("p2", "Bananas", 26)
inventory.add_product("p3", "Oranges", 36)
inventory.add_product("p4", "Dates", 4)
self.assertEqual(inventory.products_to_restock(3), ["p1", "p2"])
def test5(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 17)
inventory.add_product("p2", "Bananas", 27)
inventory.add_product("p3", "Oranges", 38)
inventory.remove_product("p2", 15)
self.assertEqual(inventory.products_to_restock(10), ["p2"])
def test6_empty_inventory(self):
inventory = InventoryManager()
self.assertEqual(inventory.products_to_restock(5), [])
def test7_no_products_below_threshold(self):
inventory = InventoryManager()
inventory.add_product("p1", "Kiwis", 100)
inventory.add_product("p2", "Bananas", 120)
inventory.add_product("p3", "Oranges", 150)
self.assertEqual(inventory.products_to_restock(5), [])
def test8_products_to_restock_sorted(self):
inventory = InventoryManager()
inventory.add_product("p3", "Cherries", 30)
inventory.add_product("p1", "Kiwis", 10)
inventory.add_product("p2", "Bananas", 20)
self.assertEqual(inventory.products_to_restock(4), ["p1", "p2", "p3"])
if __name__ == '__main__':
unittest.main()
위의 예제코드는 두 파트로 나눠져 있는걸 알 수 있다. 첫 번째 코드는 기능을 정의하는 클래스이고 두 번째 코드는 parameters (매개변수)와 수량을 선언해서 첫 번째 기능 클래스를 활용하고 있다. 우리가 라이브러리를 가져와 사용하듯이 정의된 클래스도 from과 import로 가져올 수가 있다. 구조는 from py파일명 import 클래스명으로 정의해서 사용이 가능하다. 그 뒤에는 클래스를 다시 해당 코드 내에서 재선언해 주는데, 예를 들면 inventory = inventoryManger() 이런 식으로 정의가 되어 있는 걸 볼 수 있다. 이후에는 inventory.add_product()과 같이 첫 번째 코드 inventoryManager()에 있는 def으로 정의된 기능을 가져와 사용하면 된다.
두 번째로 딕셔너리인데, 위의 첫 번째 코드를 살펴보면 self.inventory [product_id] = 로 작성이 되어있다. 이를 통해서 딕셔너리 안에 있는 배열에 추가를 하거나 제거하는데 활용이 된다. 두 개 이상의 데이터를 처리하는 경우 {}를 통해서 관리가 가능하며, def add_product에서 과일 이름과 수량이 추가될 때 사용되고 있는 걸 확인할 수가 있다.
'Programming Languages > Python' 카테고리의 다른 글
| [파이썬 코딩 테스트] 캡슐화 (Encapsulation) (3) | 2026.02.28 |
|---|---|
| [파이썬 코딩 테스트] 데이터 구조 파악하고 변환하기 (0) | 2026.02.19 |
| [파이썬 코딩 테스트] default (0) | 2026.02.15 |
| [파이썬 코딩 테스트] Tuple and Repeat (0) | 2026.02.15 |
| [파이썬 코딩 테스트] boolean (0) | 2026.02.14 |
댓글