프로그래머스 문제를 풀던 도중 예시를 모두 통과했으나 제출해보니 대부분의 테스트 케이스에서 실패했다.
이런 경우는 알고리즘이 틀리기보다는 조건 자체를 잘못 이해한 경우가 많다.
아래는 내가 잘못 이해한 조건이다.
나는 이 조건을 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 |