2018 카카오 블라인드 공채 1차 코테 문제
5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.
코딩테스트 연습 - [1차] 캐시 | 프로그래머스 (programmers.co.kr)
코딩테스트 연습 - [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
3번 문제 였으며 약 30분 정도 소요되었음.
LRU방식이었으므로 cache에 저장된 문자열만 저장할 것이 아니라,
각 cache가 언제 사용 되었는지도 저장한다.
cities의 순서대로 진행하면 되는데, cities는 대소문자 구분이 없었으므로 하나로 변환해준다.
그 후, cache에 없으면 사용한지 제일 오래된 (visited_num의 값이 제일 작은) cache를 제거하고 변경하고,
있으면 visited_num의 수를 최신으로 변경해준다.
처음 제출할 때, cachesize가 0일때 고려하지 않아 실패 처리 됐었다.
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int solution(int cacheSize, vector<string> cities) {
int answer = 0;
if (cacheSize == 0)
return 5 * cities.size();
vector<string> cache(cacheSize);
vector<int> visited_num(cacheSize, -1);
vector<string>::iterator it;
for (int i = 0; i < cities.size(); i++)
{
for (int j = 0; j < cities[i].size(); j++)
if (isupper(cities[i][j]))
cities[i][j] = tolower(cities[i][j]);
it = find(cache.begin(), cache.end(), cities[i]);
if (it == cache.end())
{
int min_ind = min_element(visited_num.begin(), visited_num.end()) - visited_num.begin();
cache[min_ind] = cities[i];
visited_num[min_ind] = i;
answer += 5;
}
else
{
visited_num[it - cache.begin()] = i;
answer += 1;
}
}
return answer;
}
'Coding_Test > 2018_KAKAO_BLIND' 카테고리의 다른 글
[2018 카카오 블라인드 공채] 뉴스 클러스터링 (C++) (0) | 2022.04.30 |
---|---|
[2018 카카오 블라인드 공채] 셔틀버스 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 프렌즈4블록 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 비밀지도 (C++) (0) | 2022.04.30 |
[2018 카카오 블라인드 공채] 다트 게임 (C++) (0) | 2022.04.30 |