2020 카카오 인턴 코테 문제

5시간을 잡고 실전처럼 진행하였으며 코드의 최적화나 알고리즘은 정확하지 않음.


코딩테스트 연습 - 보석 쇼핑 | 프로그래머스 (programmers.co.kr)

 

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

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

programmers.co.kr


3번 문제였으며 효율성과 정확도가 나뉜 문제이다. 약 두시간정도 걸렸다.

투포인터 문제였으며, 일반적인 투포인터 문제이다.

투포인터로 푸는건 알았으나 바로 접근방법이 떠오르지 않아 시간이 많이 걸렸다.

#include <string>
#include <vector>
#include <map>
#include <algorithm>

using namespace std;

vector<int> solution(vector<string> gems) {
    vector<int> answer(2, 0);
    map<string, int> gem;

    for (auto& i : gems)
        gem[i] = 0;

    int start = 0, end = 0;
    int gem_size = gem.size();
    int gem_cnt = 0;
    int min_len = 100001;
    while (1)
    {
        if (gem_cnt == gem_size)
        {
            if (end - start < min_len)
            {
                answer[0] = start + 1;
                answer[1] = end;
                min_len = end - start;
            }

            if (gem[gems[start]] <= 1)
                gem_cnt--;
            gem[gems[start]]--;
            start++;
        }
        else
        {
            if (end == gems.size())
                break;

            if (gem[gems[end]] == 0)
                gem_cnt++;
            gem[gems[end]]++;
            end++;
        }
    }

    return answer;
}

+ Recent posts