[캐시]
https://programmers.co.kr/learn/courses/30/lessons/17680
* 로직
- 만약 캐시 사이즈가 0이라면 -> cities의 개수 * 5를 리턴
- 1개 이상이라면 로직을 진행한다
- 우선 도시들을 소문자로 변환한다
- 캐시 사이즈만큼 도시를 담을 수 있는 list를 생성한다
- cities를 차례대로 꺼내어
- 만약 해당 도시가 이미 존재한다면
- 기존에 있던 해당 도시를 제거하고 가장 최신으로 갱신
- answer += 1
- 존재하지 않는다면
- list가 캐시 사이즈보다 같거나 크다면 -> 가장 오래된 부분을 제거, 해당 도시를 맨 앞으로 추가
- 그 반대라면 -> 가장 앞으로 해당 도시를 추가
- answer += 5
- 만약 해당 도시가 이미 존재한다면
import java.util.LinkedList;
class Solution {
public int solution(int cacheSize, String[] cities) {
int answer = 0;
LinkedList<String> list = new LinkedList<>();
if(cacheSize == 0) {
answer = cities.length * 5;
}
else {
for(String city : cities) {
city = city.toLowerCase();
// 만약 해당 도시가 이미 존재한다면 -> 캐싱: 해당 도시를 가장 최신으로 갱신
if(list.contains(city)) {
list.remove(city);
list.addFirst(city);
answer+=1;
}
// 존재하지 않는다면
else {
// 리스트가 캐시 사이즈를 넘어갔다면 -> 가장 오래된 부분을 제거하고, 해당 도시 맨 앞으로 추가
if(list.size() >= cacheSize) {
list.removeLast();
list.addFirst(city);
}
// 넘지 않았다면 -> 가장 앞으로 추가
else {
list.addFirst(city);
}
answer+=5;
}
}
}
return answer;
}
}
[압축]
https://programmers.co.kr/learn/courses/30/lessons/17684
* 로직
- A ~ Z까지 알파벳 한 글자에 대한 색인 번호를 HashMap에 미리 추가해놓는다
- msg의 길이만큼 탐색을 진행한다
- 첫 번째 글자를 꺼내어 해당 글자가 이미 존재하는지 판단한다
- 만약 존재한다면
- 현재 구할 수 있는 색인 번호를 담아둔다(index)
- 그리고 다음 글자와 합친다
- 존재하지 않는다면
- 현재 만들어진 단어를 사전에 추가한다(27부터)
- 반복 종료
- 위 과정이 한 번 끝나면 구할 수 있는 색인 번호(index)를 답 리스트(results)에 추가한다
- 위 과정을 반복한다
import java.util.ArrayList;
import java.util.HashMap;
class Solution {
public int[] solution(String msg) {
int[] answer = {};
// 알파벳 한글자에 대한 사전 입력
HashMap<String, Integer> hashMap = new HashMap<>();
for(int i=65; i<=90; ++i) {
char ch = (char) (i);
hashMap.put(Character.toString(ch), (i-64));
}
// 진행
ArrayList<Integer> results = new ArrayList<>();
int dictionaryIdx = 26;
int s=0;
while (s < msg.length()) {
// 현재입력
String currWord = msg.substring(s, s+1);
int index = 0;
int i=s;
while (true) {
// 현재 글자가 이미 존재한다면 -> index를 저장하고 -> 다음 문자와 붙였을 때 경우 고려
if(hashMap.containsKey(currWord)) {
index = hashMap.get(currWord);
i++;
// 마지막 글자인 경우
if(i >= msg.length()) {
s = i;
break;
}
currWord += msg.substring(i, i+1);
}
// 더이상 존재하지 않는다면 -> 만들어진 단어 사전 추가, 출력할 index 리스트에 보관
else {
hashMap.put(currWord, ++dictionaryIdx);
s = i;
break;
}
}
results.add(index);
}
answer = new int[results.size()];
for(int i=0; i<answer.length; ++i) {
answer[i] = results.get(i);
}
return answer;
}
}
'Algorithm > Problem_프로그래머스' 카테고리의 다른 글
프로그래머스([3차] 파일명 정렬) - Java (0) | 2020.05.18 |
---|---|
프로그래머스([3차] n진수 게임) - Java (0) | 2020.05.18 |
프로그래머스([1차] 프렌즈 4블록) - Java (0) | 2020.05.12 |
프로그래머스(실패율) - Java (0) | 2020.05.11 |
알고리즘(예상 대진표, [1차] 뉴스 클러스터링) - Java (0) | 2020.05.11 |