<aside>
💬 lv0
, 데이터 구조
사용자가 방문한 웹 페이지의 기록을 순서대로 유지하는 목록을 구현해주세요. 목록의 크기는 제한되어 있으며, 새로운 페이지가 추가될 때 목록이 가득 찬 경우 가장 오래된 페이지를 제거해야 합니다. 이미 목록에 존재하는 페이지를 다시 방문하는 경우, 해당 페이지는 목록의 가장 뒤로 이동해야 합니다.
예를 들어, 목록의 크기가 3이고, 순서대로 page1
, page2
, page3
, page2
, page4
페이지가 방문되었다면, 최종적으로 목록에는 [page3, page2, page4]
가 남게 됩니다.
크기 | 입력 (방문 페이지) | 출력 (목록의 상태) |
---|---|---|
3 | ['page1', 'page2', 'page3', 'page2', 'page4'] | ['page3', 'page2', 'page4'] |
2 | ['pageA', 'pageB', 'pageC'] | ['pageB', 'pageC'] |
4 | ['pageX', 'pageY', 'pageZ', 'pageX', 'pageW'] | ['pageY', 'pageZ', 'pageX', 'pageW'] |
사용자가 방문한 페이지의 기록을 크기 제한에 따라 관리합니다. 페이지가 다시 방문되면 기존 순서를 갱신합니다.
</aside>
from collections import OrderedDict
def solution(data):
size = data["size"] **#1 입력 데이터 처리**
pages = data["pages"]
cache = OrderedDict() **#2 OrderedDict 초기화**
for page in pages: **#3 페이지 방문 처리**
if page in cache:
cache.pop(page)
elif len(cache) >= size:
cache.popitem(last=False)
cache[page] = True
return list(cache.keys()) **#4 최종 목록 반환**
입력 데이터 처리
data
딕셔너리에서 size
(목록의 최대 크기)와 pages
(방문한 페이지 목록)를 추출합니다.
OrderedDict 초기화
OrderedDict
를 사용하여 순서가 유지되는 캐시(cache
)를 초기화합니다. OrderedDict
는 요소가 추가된 순서대로 요소를 저장합니다.
페이지 방문 처리
size
)에 도달한 경우, 가장 오래된 페이지를 제거하고, 새 페이지를 캐시의 맨 뒤에 추가합니다.최종 목록 반환
처리가 완료된 캐시에서 키(페이지) 목록을 추출하여 리스트로 반환합니다.
OrderedDict 자료구조
기본 형태: from collections import OrderedDict
개념: Python의 collections
모듈에 있는 OrderedDict
는 요소가 추가된 순서대로 요소를 저장하는 딕셔너리형 자료구조입니다. 이를 통해 삽입 순서가 중요한 경우에 유용하게 사용할 수 있습니다.
from collections import OrderedDict
ordered_dict = OrderedDict() #OrderedDict 생성
ordered_dict['banana'] = 3 #OrderedDict 추가
ordered_dict['apple'] = 4
ordered_dict['pear'] = 1
for key, value in ordered_dict.items(): #추가된 순서대로 출력
print(key, value)
def solution(data):
size = data['size'] **#1 입력 데이터 처리**
pages = data['pages']
return pages[-(size):] **#2 최신 페이지만 유지**
입력 데이터 처리
입력으로 주어진 data
에서 size
(목록의 크기)와 pages
(방문한 페이지 목록)를 추출합니다. 이 단계에서는 문제의 설정에 따라 필요한 초기 데이터를 준비합니다.
최신 페이지만 유지
제공된 코드는 목록의 크기를 고려하여 최신 size
개수의 페이지만을 반환합니다. 이는 pages[-(size):]
를 통해 구현됩니다. 하지만, 이 방법은 이미 방문한 페이지를 다시 방문했을 때의 처리와 목록이 가득 찬 경우 오래된 페이지를 제거합니다.
Deque (데큐)