programmers.co.kr/learn/courses/30/lessons/17680
큐, 리스트 등의 자료구조를 통해서 해결 가능한 문제
저는 큐를 선택했습니다.
첫번째로 들어온 값을 제거하는 부분에서
큐는 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 |