본문 바로가기
공부기록/[Algorithm]

백준 1157번 <단어 공부> - C++

by RiverWon 2024. 8. 4.

 

생각


1. 문자열의 각 문자를 대문자로 바꾼다

2. 문자열 길이만큼 반복하며 map에 원소 등록

3. find 함수로 이미 원소가 존재하면, +1

4. map을 순회하며 value가 최대인 key 출력. 최대가 2개 이상이면 ?출력

#include <iostream>
#include <string>
#include <map>

using namespace std;

int main() {
  string str;
  cin >> str;
  
  for(int i=0; i<str.length(); i++){
    str[i] = toupper(str[i]);
  }

  map<char, int> m;

  for(int i=0; i<str.length(); i++){
    if(m.find(str[i]) == m.end()){
      m[str[i]] = 1;
    }
    else{
      m[str[i]]++;
    }
  }
  char var;
  int max=0;
  int flag=0;
  for (map<char, int>::iterator it = m.begin(); it != m.end(); it++){
    if(it->second > max){max = it->second; var=it->first;}
  }
  for (map<char, int>::iterator it = m.begin(); it != m.end(); it++){
    if(it->second == max){flag++;}
  }
  if(flag>1){cout<<"?";}
  else{cout<<var;}
  return 0;
}

map을 처음 써 봐서 코드가 너무 지저분하다. 플래그를 통해서 최대인 글자수의 중복을 확인 했는데, 다른 방법도 생각해 봐야 겠다.