아무나개발하자

[1차] 캐시 본문

코딩테스트

[1차] 캐시

개발천재나천재 2023. 1. 27. 20:48

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이

- 처음에 이렇게 풀었다. 근데 maxlen을 사용하지 않고 밑에서 다시 풀어품

"""
문제 풀이 방법
1. 캐시를 queue형태로 만든다.
2. 캐시에 hit하면 해당 원소를 remove하고 다시 append를 해준다.
3. 캐시에 hit를 하지 못했을 경우 해당 선입선출 후 다음 원소를 삽입 (deque maxlen)
"""
from collections import deque

def solution(cacheSize, cities):
    answer = 0
    caches = deque(maxlen = cacheSize)
    
    for elem in cities:
        elem = elem.lower()
        # hit 경우
        if (elem in caches):
            caches.remove(elem)
            caches.append(elem)
            answer += 1
        else:
            # no hit 경우
            caches.append(elem)
            answer += 5
            
    return answer

 

- deque의 maxlen을 사용하지 않고 풀었을 경우!

"""
문제 풀이 방법
1. 캐시를 queue형태로 만든다.
2. 캐시에 hit하면 해당 원소를 remove하고 다시 append를 해준다.
3. 캐시에 hit를 하지 못했을 경우 해당 선입선출 후 다음 원소를 삽입 (deque maxlen)
"""
from collections import deque

def solution(cacheSize, cities):
    answer = 0
    caches = deque()
    
    for elem in cities:
        elem = elem.lower()
        
        # hit 경우
        if elem in caches:
            caches.remove(elem)
            caches.append(elem)
            answer += 1
            
        # no hit 경우
        else:
            if cacheSize == 0:
                answer += 5
            elif len(caches) < cacheSize:
                caches.append(elem)
                answer += 5
            else:
                if len(caches) != 0:
                    caches.popleft()
                    caches.append(elem)
                    answer += 5
                
    return answer

'코딩테스트' 카테고리의 다른 글

N개의 최소 공배수  (0) 2023.01.30
영어 끝말잇기  (0) 2023.01.28
문자열 내 마음대로 정렬하기  (0) 2023.01.26
가장 가까운 같은 글자  (0) 2023.01.13
[1차] 비밀지도  (0) 2023.01.11