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
큐, 리스트 등의 자료구조를 통해서 해결 가능한 문제
저는 큐를 선택했습니다.
첫번째로 들어온 값을 제거하는 부분에서
큐는 poll을, 리스트라면 remove(0)을 이용하면됩니다.
주의점
캐쉬 사이즈 0인 경우를 고려 해야합니다.
저의 경우 0 인경우 전체 miss의므로 *5를 리턴하도록 하였습니다.
import java.util.LinkedList;
import java.util.Queue;
// 프로그래머스 캐쉬 문제
class Cache {
public int solution(int cacheSize, String[] cities) {
Queue<String> q = new LinkedList<>();
int cityIdx = 0;
int answer = 0;
// 캐쉬 사이즈가 0 이면 모두 miss 처리
if (cacheSize == 0) return cities.length * 5;
while (true) {
if(cityIdx == cities.length) break;
// 대소문자 구분 x 이므로 소문자로 통일
String now = cities[cityIdx++].toLowerCase();
// 포함된 경우
if(q.contains(now)) {
// q의 맨 뒤로 보내기 위해서 제거 후 추가
q.remove(now);
q.offer(now);
answer++;
}
else {
// 캐쉬 사이즈가 꽉차는 경우는 하나 제거
if(q.size() == cacheSize) q.poll();
// 포함되지않은 경우는 무조건 miss 이므로
q.offer(now);
answer += 5;
}
}
return answer;
}
}
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 짝지어 제거하기 문제 (자바) (0) | 2021.04.07 |
---|---|
프로그래머스 - 방문 길이 문제 (자바) (0) | 2021.04.06 |
프로그래머스 - N진수 게임 문제 (자바) (0) | 2021.04.02 |
프로그래머스 - 뉴스 클러스터링 문제 (자바) (0) | 2021.03.31 |
프로그래머스 - 다음 큰 숫자 (자바) (0) | 2021.03.30 |