https://school.programmers.co.kr/learn/courses/30/lessons/17680
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
LV 2
구현 방법
0 ≦ cacheSize ≦ 30
cities는 도시 이름으로 이뤄진 문자열 배열로, 최대 도시 수는 100,000개이다.
O(n^2)도 가능하다. 큐를 이용하면 조건에 만족하는 사이즈 내에서 LRU를 만족하며 구현 될거라고 생각했다.
그런데 오류가 떠서 생각해보니까 큐 안에 값이 존재하는 경우, 큐 내에서 위치를 업데이트 시켜 줘야 하는걸 깨닮았다.
그런데 또 오류 떠서 보니까, 대소문자 고려 안한다는 걸 반영 안했다!
그런데 또 오류 떠서 보니까, cachSize가 0인 경우를 고려 안했다.
그거까지 반영하면 통과된다.
코드
큐 내에서 위치 업데이트 안 시켜준 코드
import java.util.Queue;
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
Queue<String> queue = new LinkedList<>();
for(String s : cities) {
if(queue.contains(s)) {
answer += 1;
} else {
if (queue.size() <= cacheSize) {
queue.add(s);
} else {
queue.poll();
queue.add(s);
}
answer += 5;
}
}
return answer;
}
}
정답 코드
import java.util.Queue;
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
Queue<String> queue = new LinkedList<>();
for(String s : cities) {
s = s.toLowerCase();
if(queue.contains(s)) {
queue.remove(s);
queue.add(s);
answer += 1;
} else {
if (cacheSize != 0 && queue.size() < cacheSize) {
queue.add(s);
} else if(cacheSize != 0) {
queue.poll();
queue.add(s);
}
answer += 5;
}
}
return answer;
}
}
느낀 점
문제 풀때, 범위 보면서 구현하고 한번에 꼼꼼히 체크하는 습관이 중요함을 느꼈다.
참고 블로그
'알고리즘' 카테고리의 다른 글
자바 - 프로그래머스 / 피보나치 수 (1) | 2023.05.03 |
---|---|
자바 - 프로그래머스 / 개인정보 수집 유효기간 (0) | 2023.05.03 |
자바 - 프로그래머스 / 이모티콘 할인 행사 (0) | 2023.04.28 |
자바 - 프로그래머스 / 광물 캐기 (0) | 2023.04.24 |
자바 - 프로그래머스 / 연속된 부분 수열의 합 (0) | 2023.04.24 |