728x90
반응형
두 개의 문자열이 주어졌을 때, 두 문자열에서 공통으로 나타나는 문자의 개수를 찾는 문제입니다.
예를 들어, "aabcc"와 "adcaa" 두 문자열이 주어졌을 때, 공통으로 나타나는 문자는 'a'와 'c'이며, 이들의 개수는 각각 2개와 1개입니다. 따라서, 이 경우 함수는 3을 반환해야 합니다.
문제의 목표는 주어진 두 문자열에서 공통으로 나타나는 문자의 총 개수를 계산하는 것입니다.
int solution(string s1, string s2) {
Dictionary<char,int> dic1 = new Dictionary<char, int>();
Dictionary<char,int> dic2 = new Dictionary<char, int>();
HashSet<char> hash = new HashSet<char>();
foreach(char c in s1){
if(!dic1.ContainsKey(c)) dic1[c] = 1;
else dic1[c]++;
}
foreach(char c in s2){
if(!dic2.ContainsKey(c)) dic2[c] = 1;
else dic2[c]++;
}
int ret = 0;
for(int i = 0;i<s1.Length;i++){
if(!hash.Contains(s1[i]) && dic1.ContainsKey(s1[i]) && dic2.ContainsKey(s1[i])){
hash.Add(s1[i]);
ret += Math.Min(dic1[s1[i]], dic2[s1[i]]);
}
}
return ret;
}
dic1과 dic2는 각각 s1과 s2의 문자 빈도를 나타내는 딕셔너리입니다. 각 문자가 몇 번 나타나는지 기록합니다.
hash는 이미 검사한 문자를 추적하기 위한 해시셋입니다.
foreach 루프를 사용하여 각 문자열의 빈도를 딕셔너리에 기록합니다.
for 루프에서 s1의 각 문자에 대해, 이미 검사한 문자가 아니고 dic1과 dic2에 해당 문자가 존재한다면 공통 문자로 판단합니다.
hash에 문자를 추가하고, 빈도 중 작은 값을 더합니다.
최종적으로 두 문자열에서 공통으로 나타나는 문자의 총 빈도수를 반환합니다.
문자 빈도를 딕셔너리로 기록하여 각 문자에 대한 검사를 빠르게 수행하며,
해시셋을 사용하여 중복 계산을 피합니다.
728x90
반응형
'CodeSignal' 카테고리의 다른 글
Sort by Height (0) | 2023.12.02 |
---|---|
isLucky (0) | 2023.12.01 |
All Longest Strings (0) | 2023.11.27 |
matrixElementsSum (0) | 2023.11.25 |
Almost Increasing Sequence (0) | 2023.11.25 |