Make Unreal REAL.
article thumbnail
Level 3. 보석 쇼핑

 

 

투 포인터 문제였다.

 

첫 시도에서 앞에서부터가 아니라 뒤에서부터 진행시켜서 조금 헷갈렸었다.

 

해시 테이블을 통해 보석 종류와 개수를 저장하고, 모든 보석이 포함된 경우 앞에서부터 1개씩 빼주면 된다.

  • 그리고 최소 길이를 별도로 관리해 더 짧은 경우 정답을 갱신해주면 된다.

 

최소 길이를 변수로 관리할 생각도 못했어서 좀 헷갈렸었는데, 변수를 잘 활용하는 습관을 들이자.

 

#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

vector<int> solution(vector<string> gems)
{
    vector<int> answer;
    unordered_map<string, int> umap, current;
    size_t n = gems.size();
    int minLen = n;

    for (string& gem : gems)
        ++umap[gem];

    for (int s = 0, e = 0; e < n; ++e)
    {
        ++current[gems[e]];

        if (current.size() == umap.size())
        {
            while (2 <= current[gems[s]])
                --current[gems[s++]];

            int len = e - s;

            if (len < minLen)
            {
                minLen = len;
                answer = {s + 1, e + 1};
            }
        }
    }

    return answer;
}

'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글

Level 3. 스티커 모으기(2)  (0) 2023.09.05
Level 3. 경주로 건설  (0) 2023.09.04
Level 2. 광물 캐기  (0) 2023.09.02
Level 2. 혼자서 하는 틱택토  (0) 2023.09.01
Level 2. 혼자 놀기의 달인  (0) 2023.08.31
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그