티스토리 뷰

https://programmers.co.kr/learn/courses/30/lessons/67258

 

코딩테스트 연습 - 보석 쇼핑

["DIA", "RUBY", "RUBY", "DIA", "DIA", "EMERALD", "SAPPHIRE", "DIA"] [3, 7]

programmers.co.kr

투포인터 알고리즘을 이용해 gems Vector를 탐색하며 Map으로 현재 가진 보석의 수를 체크해주었습니다.


C++ 소스 코드

#include <string>
#include <vector>
#include <map>
using namespace std;

vector<int> solution(vector<string> gems) {
    vector<int> answer;
    map<string, int> mp;
    for(int i=0;i<gems.size();i++){
        mp[gems[i]]=0;
    }
    int jSize = mp.size();
    int r = 0, l = 0;
    int last = (int)gems.size();
    int nowcnt = 0;
    answer.push_back(0);
    answer.push_back(last);
    while(true){
        if (nowcnt >= jSize){
            if(mp[gems[l]]-1==0){
                nowcnt--;
            }
            mp[gems[l++]]--;
        } else if (r == last) break;
        else {
            if(mp[gems[r]]==0) nowcnt++;
            mp[gems[r++]]++;
        }
        if(nowcnt == jSize) {
            if (r-l < answer[1]-answer[0]){
                answer[0]=l;
                answer[1]=r;
            }
        }
    }
    answer[0]++;
    return answer;
}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함