[프로그래머스]캐시

박민하·2022년 9월 9일
0

python 문제

목록 보기
46/49

문제

✅ 코드

1. 정답률 40%

def solution(cacheSize, cities):
    num = 5*cacheSize
    lst= []
    for i in cities:
        lst.append(i.lower())
    try:
        for i in range(30):
            if lst[i+cacheSize] in lst[i:i+cacheSize]:
                num += 1
            else:
                num += 5
    except:
        return num

  테스트 8까지는 맞는데 이후는 다 틀린 답.

2. 정답률 50%

def solution(cacheSize, cities):
    if cacheSize == 0:
        return 5*len(cities)
    lst1 = []
    for i in cities:
        lst1.append(i.lower())
    lst2 = lst1[0:cacheSize]
    num = 5*cacheSize
    try:
        for i in range(30):
            if lst1[i+cacheSize] in lst2:
                num += 1
                lst2.remove(lst1[i+cacheSize])
                lst2.append(lst1[i+cacheSize])
            else:
                num += 5
                del lst2[0]
                lst2.append(lst1[i+cacheSize])
    except:
        return num

  9, 17번을 추가로 맞췄지만...

3. 다른 사람의 코드

def solution(cacheSize, cities):
    import collections
    cache = collections.deque(maxlen=cacheSize)
    time = 0
    for i in cities:
        s = i.lower()
        if s in cache:
            cache.remove(s)
            cache.append(s)
            time += 1
        else:
            cache.append(s)
            time += 5
    return time

☑️ 핵심코드

1. deque(데크): 양방향 큐

  • deque.append(x): 오른쪽 끝에 x 추가.
  • deque.appendleft(x): 왼쪽 끝에 x 추가.
  • deque.pop(): 오른쪽에서 요소를 제거하고 반환.
  • deque.popleft(): 왼쪽에서 요소를 제거하고 반환.
  • deque.extend(iterable): 배열(iterable)을 순환하면서 데크의 오른쪽에 추가.
  • deque.extendleft(iterable): 배열(iterable)을 순환하면서 데크의 왼쪽에 추가.
  • deque.remove(x): x를 찾아 삭제.
  • deque.rotate(num): 데크를 num만큼 회전(양수면 오른쪽, 음수면 왼쪽).

[참고 사이트][collections — 컨테이너 데이터형 — Python 3.10.7 문서](https://docs.python.org/ko/3/library/collections.html#deque-objects)
Python - 데크(deque) 언제, 왜 사용해야 하는가?

profile
backend developer 🐌

0개의 댓글