본문 바로가기
CodeSignal

commonCharacterCount

by Doromi 2023. 11. 28.
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