Make Unreal REAL.
article thumbnail

 

프로그래머스 문제를 풀던 도중 예시를 모두 통과했으나 제출해보니 대부분의 테스트 케이스에서 실패했다.

 

이런 경우는 알고리즘이 틀리기보다는 조건 자체를 잘못 이해한 경우가 많다.

 

아래는 내가 잘못 이해한 조건이다.

 

 

나는 이 조건을 x가 아닌 다른 글자들이 아니라 x가 아닌 다른 글자들 중이라고 이해하여 아래와 같은 잘못된 풀이를 작성했다.

 

int solution(string s)
{
    int answer = 0;
    size_t length = s.length();
    unordered_map<char, int> umap;

    for (int i = 0; i < length; ++i)
    {
        ++umap[s[i]];

        int minCount = INT_MAX;
        
        for (pair<char, int> pr : umap)
        {
            if (pr.second == minCount)
            {
                ++answer;
                umap.clear();

                break;
            }
            else
            {
                minCount = min(minCount, pr.second);
            }
        }
    }

    return answer + !umap.empty();
}

 

x가 아닌 다른 글자들을 각각 비교하는 것이 아니라 다른 글자들의 개수의 합과 비교해 해결할 수 있었다.

 

#include <iostream>
#include <unordered_map>

using namespace std;

int solution(string s)
{
    int answer = 0;
    int sum = 0;
    size_t length = s.length();
    unordered_map<char, int> umap;

    for (int i = 0; i < length; ++i)
    {
        ++sum;
        ++umap[s[i]];

        for (pair<char, int> pr : umap)
        {
            if (pr.second == sum - pr.second)
            {
                ++answer;
                sum = 0;
                umap.clear();

                break;
            }
        }
    }

    return answer + !!sum;
}

'자료구조 & 알고리즘 > 기타' 카테고리의 다른 글

공백 관련 처리  (0) 2023.03.02
istream의 기능들  (0) 2023.03.02
정규 표현식으로 문자열 교체  (0) 2023.02.21
lower_bound, upper_bound  (0) 2023.02.19
multiset, multimap에서 1개 원소만 삭제  (0) 2023.02.19
profile

Make Unreal REAL.

@diesuki4

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

검색 태그