프로그래머스 : 캐시[1차] 카카오 블라인드

김진만·2022년 11월 15일
0

코딩테스트

목록 보기
4/10

2018년도 문제여서 그런지 덜 난잡하다!

cache 사이즈가 주어지고, 도시의 이름이 담긴 리스트가 주어진다
1.cache 사이즈
2.도시 리스트
예를 들어 cache size가 2일 때, 도시 리스트가 [서울,부산,서울,부산]이면
1.[서울]
2.[서울,부산]
3.[부산,서울]
4.[서울,부산]
으로 쌓일 것이다. 이럴 때 1번 프로세스가 이뤄질때 cache miss라고 보는거다
왜냐면 캐시에 쌓여있는 정보 중에 서울에 대한 데이터가 없는 즉, 캐시 사이즈에 도달할 때 까지는
계속 cache miss다 cache miss는 비용이 5만큼 든다
2번에 [서울,부산]이 됐을때 cache size에 도달했다. 여기까지 발생한 비용은 5+5해서 10
이제 3번에서 [서울,부산]에 서울이 들어오려하니 서울이 맞아떨어져서

히트다 히트!! cache hit 그래서 비용이 1만큼 발생하여 11

그리고 앞서있던 0번째 인자 서울은 사라지고 [부산,서울]로 바뀐다.
여러가지 전처리와 예외에 대해 생각 해야한다.

1: 대문자를 소문자로 바꾸거나 소문자를 대문자로 바꾸거나

2: cache size=0 일때, 이때는 도시가 다 똑같아도 담을 수 있는 그릇이 없기때문에 계속 cache miss가 날 것, (cache size)*5 반환하면 될 것이다!

def solution(cacheSize, cities):
    answer = 0
    arr=[]
    city=[]
    for i in cities:
        city.append(i.lower())
    if cacheSize==0:
        answer=len(city)*5
    else:
        for i in city:
            if i not in arr:
                if len(arr) >= cacheSize:
                    arr.pop(0)
                    arr.append(i)
                    answer+=5
                else:
                    arr.append(i)
                    answer += 5
            else: 
                    arr.remove(i)
                    arr.append(i)
                    answer+=1
    return answer

작성한 코드는 이렇다.

중요하다고 생각하는 건 리스트 안에 같은 도시가 있을 때는 remove 로 같은 도시를 지워주고 같은 도시를 넣어주는 거고

같은 도시가 없을 때는 pop으로 0번째 인자를 빼주는 것이다

이때 생각했던 게 deque()를 쓰고 싶었꼬, cachesize만큼만 길이를 설정해서 쓰고싶다 생각했는데 다 풀고 다른사람 풀이를 보니 deque(maxlen=type(int)) 가 있더라고요

요렇게!!

def solution(cacheSize, cities):
    from collections import deque
    answer = 0
    cache=deque(maxlen=cacheSize)
    city = []
    for i in cities:
        s = i.upper()
        if s in cache:
            cache.remove(s)
            cache.append(s)
            answer+=1
        else:
            cache.append(s)
            answer+=5
    return answer

cacheSize=2
cities = 	["Jeju", "Pangyo", "Seoul", "NewYork", "LA", "SanFrancisco", "Seoul", "Rome", "Paris", "Jeju", "NewYork", "Rome"]
print(solution(cacheSize,cities))
profile
충분한 전기와 컴퓨터 한 대와 내 이 몸만 남아 있다면 지구를 재건할 수 있습니다.

0개의 댓글