ye0nn
영차영차
ye0nn
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • CS (0)
      • 운영체제 (0)
      • 네트워크 (0)
      • 알고리즘 & 자료구조 (0)
    • 코딩테스트 (48)
      • 프로그래머스 (40)
      • 백준 (8)
    • 프로그래밍 (11)
      • 프론트엔드 (3)
      • 자바스크립트 (0)
      • 스위프트 (7)
      • 파이썬 (1)
    • 취준기록 (1)

인기 글

블로그 메뉴

  • 홈
  • 태그
  • 방명록

티스토리

hELLO · Designed By 정상우.
ye0nn

영차영차

[프로그래머스] Level 2 - [1차] 캐시 (Python)
코딩테스트/프로그래머스

[프로그래머스] Level 2 - [1차] 캐시 (Python)

2022. 5. 17. 21:44

 

 

 

https://programmers.co.kr/learn/courses/30/lessons/17680

 

코딩테스트 연습 - [1차] 캐시

3 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "Jeju", "Pangyo", "Seoul", "NewYork", "LA"] 50 3 ["Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul", "Jeju", "Pangyo", "Seoul"] 21 2 ["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Ro

programmers.co.kr

 

 

 

✅ Solution

  • cache 딕셔너리를 만들어두고 city 가 cache.keys()에 있는지 확인한다.
  • 있으면 answer에 1을 더해주고 해당 값을 city의 인덱스로 바꿔준다.
  • 없으면 answer에 5를 더해주고 
    • cache의 길이가 cacheSize 보다 작을 땐 바로 딕셔너리에 새 값으로 추가해준다.
    • cache의 길이가 cacheSize 보다 클 땐 가장 작은 값을 가지는 key 값을 찾아서 삭제 후, 값을 추가해준다.

 

 

 

✅  Code

def solution(cacheSize, cities):
    cache = {}
    cities = [x.lower() for x in cities]
    answer = 0

    if cacheSize == 0:
        return len(cities) * 5

    for idx, city in enumerate(cities):
        if city in cache.keys():
            cache[city] = idx
            answer += 1
        else:
            if len(cache) < cacheSize:
                cache[city] = idx
                answer += 5
            else:
                minKey = min(cache.keys(), key=lambda x: cache[x])
                cache.pop(minKey)
                cache[city] = idx
                answer += 5

    return answer

 

 

 

 

#################################################################################

 

✅ Solution

  • cache: deque의 maxlen을 이용해서 cacheSize로 최대 길이를 고정시킨다.
  • 만약 city가 cache에 있으면 해당 값을 제거 후, 다시 넣어준다. answer += 1
    • deque(maxlen=k)로 초기화해두고 난 뒤, 만약 k 이상이 되도록 원소를 추가(append)하면 제일 왼쪽에 있는 원소가 삭제된다
  • 만약 city가 cache에 없으면 cache에 값 넣어준다.

 

 

 

✅ Code

from collections import deque

def solution(cacheSize, cities):
    answer = 0
    cities = [x.lower() for x in cities]
    cache = deque(maxlen=cacheSize)

    for city in cities:
        if city in cache:
            cache.remove(city)
            cache.append(city)
            answer += 1
        else:
            cache.append(city)
            answer += 5

    return answer

 

 

 

📝 Today I Learned

deque

  • maxlen -> deque의 최대 길이를 설정한다.
  • 만약 maxlen 이상의 값을 추가하면
    • append() : 맨 왼쪽 원소가 삭제된 후, 맨 오른쪽에 원소가 추가된다.
    • appendleft(): 맨 오른쪽 원소가 삭제된 후, 맨 왼쪽에 원소가 추가된다.

 

 

저작자표시 (새창열림)

'코딩테스트 > 프로그래머스' 카테고리의 다른 글

[프로그래머스] Level 2 - [3차] 압축 (Python)  (0) 2022.05.20
[프로그래머스] Level 2 - [3차] 방금그곡 (Python)  (0) 2022.05.18
[프로그래머스] Level 2 - [1차] 프렌즈4블록 (Python)  (0) 2022.05.17
[프로그래머스] Level 2 - 튜플 (Python)  (0) 2022.05.13
[프로그래머스] Level 2 - 후보키 (Python)  (0) 2022.05.13
    '코딩테스트/프로그래머스' 카테고리의 다른 글
    • [프로그래머스] Level 2 - [3차] 압축 (Python)
    • [프로그래머스] Level 2 - [3차] 방금그곡 (Python)
    • [프로그래머스] Level 2 - [1차] 프렌즈4블록 (Python)
    • [프로그래머스] Level 2 - 튜플 (Python)
    ye0nn
    ye0nn
    프론트엔드 개발자의 개발기록

    티스토리툴바