본문 바로가기

code/programmers

2018 카카오 블라인드 테스트 3번

문제 링크:

 

카카오 신입 공채 1차 코딩 테스트 문제 해설

‘블라인드’ 전형으로 실시되어 시작부터 엄청난 화제를 몰고 온 카카오 개발 신입 공채. 그 첫 번째 관문인 1차 코딩 테스트가 지난 9월 16일(토) 오후 2시부터 7시까지 장장 5시간 동안 온라인으로 치러졌습니다. 지원자들의 개발 능력을 잘 검증하기 위해 출제 위원들이 한 땀 한 땀 독창적이고 다양한 문제들을 만들어 냈고 문제에 이상은 없는지, 테스트케이스는 정확한지 풀어보고 또 풀어보며 […]

tech.kakao.com

입출력:

TC# 입력 출력
1 3
Jeju Pangyo Seoul NewYork LA Jeju Pangyo Seoul NewYork LA
50
2 3
Jeju Pangyo Seoul Jeju Pangyo Seoul Jeju Pangyo Seoul
21
3 2
Jeju Pangyo Seoul NewYork LA SanFrancisco Seoul Rome Paris Jeju NewYork Rome
60
4 5
Jeju Pangyo Seoul NewYork LA SanFrancisco Seoul Rome Paris Jeju NewYork Rome
52
5 2
Jeju Pangyo NewYork newyork
16
6 0
Jeju Pangyo Seoul NewYork LA
25

코드:

#include <iostream>
#include <vector>
#include <string>
#include <list>

using namespace std;

int cacheSize;
string city;
vector<string> cities;
list<string> cache;
int t;

int main() {
	cin >> cacheSize;
	while (!cin.eof()) {
		string str, city;
		cin >> str;
		for (auto ch : str) {
			if ('A' <= ch && ch <= 'Z')
				city.push_back(ch + 'a' - 'A');
			else
				city.push_back(ch);
		}
		cities.push_back(city);
	}

	if (cacheSize == 0) {
		cout << cities.size() * 5;
		return 0;
	}

	int i = 0;
	for (i = 0; i < cacheSize; ++i) {
		cache.push_back(cities[i]);
		t += 5;
	}

	for (; i < cities.size(); ++i) {
		auto it = find(cache.begin(), cache.end(), cities[i]);
		if (it != cache.end()) {	// cache hit
			++t;

			cache.erase(it);
			cache.push_back(cities[i]);
		}
		else {	// cache miss
			t += 5;

			cache.erase(cache.begin());
			cache.push_back(cities[i]);
		}
	}

	cout << t;
	return 0;
}