[Programmers] 보석 쇼핑
Date:
[Programmers] 보석 쇼핑
Problem URL : 보석 쇼핑
#include <string>
#include <vector>
#include <map>
#include <iostream>
using namespace std;
vector<int> solution(vector<string> gems) {
vector<int> answer;
map<string, int> m;
string tmp;
int size = gems.size();
for(int i = 0; i < size; i++) {
m[gems[i]]++;
}
int full = m.size();
int start = 0;
int end = 0;
m.clear();
m[gems[0]]++;
int x = 0;
int y = size;
while(start <= end) {
if(m.size() == full) {
if(y - x > end - start) {
y = end;
x = start;
}
if(--m[gems[start]] == 0) {
m.erase(gems[start]); // [1]
}
start++;
}else{
end++;
if(end == gems.size()) {
break;
}
m[gems[end]]++;
}
}
answer.push_back(x + 1);
answer.push_back(y + 1);
return answer;
}
Comments
간단한 투포인터 문제이다.
[1] 0 값으로 만들어주어도 erase를 따로해주어야 size에서 제외된다.
댓글