포스트 난이도: HOO_Junior
# 재고량에 대한 통계 분석하기
사실 코딩 테스트를 보면 기본적인 문법이나 Funcitons들에 대한 추론 능력을 확인하고 그 뒤부터는 사실상 퍼즐처럼 여러 개가 조합된 유형의 문제가 많이 나오는 편이다. 한마디로 문제를 읽고 알고 있는 지식을 기반으로 구조를 파악할 수 있는지를 평가하는 셈이다. 이번 포스트에서 나올 예제코드도 재고량에 대한 통계 분석이지만 구체적으로 요구되는 지식은 데이터 구조를 파악하고 이에 맞게끔 데이터를 변환해서 결과를 산출할 수 있는지를 확인하기 위한 것이다.
class LibraryManager:
def __init__(self):
self.inventory = {}
def add_book(self, book_id: str, title: str, author: str) -> bool:
if book_id in self.inventory:
self.inventory[book_id]["title"] = title
self.inventory[book_id]["author"] = author
else:
self.inventory[book_id] = {"title": title, "author": author}
return True
def get_book(self, book_id: str) -> dict[str, str] | None:
return self.inventory.get(book_id, None)
def remove_book(self, book_id: str) -> bool:
if book_id in self.inventory:
del self.inventory[book_id]
return True
return False
def inventory_statistics(self) -> dict[str, object]:
total_books = len(self.inventory)
authors = {book["author"] for book in self.inventory.values()}
unique_authors_count = len(authors)
titles = [book["title"] for book in self.inventory.values()]
titles.sort()
return {
"total_books": total_books,
"unique_authors": unique_authors_count,
"titles": titles
}
예를 들어 위의 코드처럼 책 재고에 대해서 분석하는 코드를 구현할때, 현재의 데이터 구조를 파악하고 str -> int로 변환하는 과정을 def inventory_statistics로 만들어낼 수 있다. 첫 번째로는 전체 도서 수를 계산해야 하기 때문에 len() function을 활용해서 이미 self로 지칭이 되어있는 inventory를 가져올 수가 있다. 그리고 그걸 total_books로 다시 선언해 줘서 해당 블록 안에서 전체 도서 수에 해당하는 매개변수로 활용이 가능하다.
두 번째로는 저자 이름이 중복된 경우가 있을 수 있기 때문에 중복을 제거하는데 set을 활용하는 것이 편하고 쉽다. 간단히 생각해서 중복 또는 고유한 것을 찾아낸다 싶으면 파이썬에서 set을 생각하면 된다. set를 활용하고 그다음에 바로 이어서 dictionary function을 통해서 각 도서의 정보를 매칭에서 확인까지 하면 중복과 저자-도서 연결이 가능하다. 먼저 authors라는 매개변수를 새롭게 선언해 주고 그거에 대한 정읠 =에 써주면 된다. [book ["title"] for book in self.inventory.values()]를 보게 되면 for 문을 사용하고 있으면서도 values()라는 걸로 특정 값을 뽑아내는데 이걸 list comprehension이라고 부른다. 한마디로 위에 inventory = {}가 선언되어 있고 여기에 아이디부터, 제목, 저자 등이 있는데 여기서 필요한 것만 골라내겠다는 것이다. 그래서 list comprehenison, 즉 복잡한 리스트에서 필요한 value()를 가져오겠다는 말로 기억하면 쉽게 생각이 난다.
세 번째로 만약 알파벳으로 정렬하라고 나왔다면 그냥 매개변수. sort()를 사용하면 알파벳순으로 정렬이 된다. 보통 여기까지만 나오는데 혹시나 역순 문제로 나올 경우 title.sort(reverse=True) 이런 식으로 써주면 된다. 왜 내가 sort()만 나온다고 했냐면 본질적으로 이걸 물어보는 건 sort()를 알고 있냐는 거지 sort() 하나로만 평가를 할게 아니기 때문이다. 전체 구조를 추론할 수 있는지에 대한 능력을 평가하기도 바쁜데 sort() 하나로만 reverse인지 물어보는 게 중요하지 않다고 생각한다. 그래도 혹시라도 나오면 참고하길 바란다.
마지막으로 return을 하라고 했다면 return을 사용하고 이 경우처럼 여러개를 산출해내야 한다면 {}를 사용하는 편이다. 예를 들어서 위의 코드처럼 return {}를 통해서 각각의 매개변수를 나타내는 결과를 반환할 수 있게 만들어줄 수 있다.
내가 생각하는 코딩테스트의 핵심은 문제를 보고 그림을 그릴 수 있냐는 것이다. 나도 솔직히 문제를 보고 뭘 넣고 정리해야지가 보이지 막상 오랜만에 코드를 일일이 쓰다 보면 이게 맞나 싶을 때가 맞다. 둘 다 되면 좋지만 실질적으로 이제 AI가 코드를 작성해 주기 때문에 우선적으로 가져가야 할 부분은 추론과 응용력이라고 생각한다. 물론 테스트 때 나처럼 구조가 알아도 직접 말할 수가 없으니 코딩테스트를 잘 보려면 몇 번 연습이 필요하긴 하다.
'Programming Languages > Python' 카테고리의 다른 글
| [파이썬 코딩테스트] 캡슐화 (encapsulation)에서 private methods 사용하기 (0) | 2026.03.02 |
|---|---|
| [파이썬 코딩 테스트] 캡슐화 (Encapsulation) (3) | 2026.02.28 |
| [파이썬 코딩 테스트] 재고 관리와 Dictionary (0) | 2026.02.16 |
| [파이썬 코딩 테스트] default (0) | 2026.02.15 |
| [파이썬 코딩 테스트] Tuple and Repeat (0) | 2026.02.15 |
댓글