Approach

  • 문자열 paragraph로부터 for문을 통해 한 문자씩 받아와 isalpha()함수로 문자만을 받아서 word 변수에 추가한다.
  • 문자열이 아닌경우 지금까지 추가한 문자열 word를 자료형 map인 map_words 변수에 key값으로 저장하여 후위연산자를 실행해준다.
  • 이때 map_words에 word라는 key값이 존재할 경우 value값이 1증가하겠지만 그렇지 않을 경우 새로 word라는 key값이 생성되면서 자동으로 0으로 초기화된다. 후에 1을 더해 1부터 시작한다.
  • map에 등록을 해주면 다시 word 변수는 ""으로 초기화해준다.
  • for문을 탈출한뒤에 word가 비어있는 값이 아니라면 추가적으로 map_words에 위와 동일하게 실행해준다.
  • banned 벡터에 저장되어있는 문자열들이 map_words에 존재하거나 없거나 상관없이 해당 key값들은 모두 0으로 초기화해줌으로써 문제가 원하는 가장 많이 쓴 언어를 찾는데 있어서 배제시켜준다.
  • count는 호출된 횟수로 map_words의 value값이 count보다 클 수록 갱신되면서 동시에 문자열 ans 변수에 key값을 저장함으로 가장 많이 호출된 단어가 저장된다.

Code

class Solution {
public:
    string mostCommonWord(string paragraph, vector<string>& banned) 
    {
        string word = "";
        unordered_map<string, int> map_words;

        for(char c : paragraph)
        {
            if(isalpha(c))
            {
                word += tolower(c);
            }
            else if(word != "")
            {
                map_words[word]++;
                word = "";
            }
        }

        if(word != "")
        {
            map_words[word]++;
        }

        string ans = "";
        int count = 0;

        for(auto s : banned)
        {
            map_words[s] = 0;
        }

        for(auto s : map_words)
        {
            cout << s.first << " " << s.second << "\n";
            if(s.second > count) ans = s.first, count = s.second;
        }

        return ans;
    }
};

Result

profile
누누의 잡다저장소

0개의 댓글