본문 바로가기
코딩테스트/programming_C++

baekjoon #1157_단어 공부_c++

by prometedor 2021. 10. 26.
  • 대문자로 변경하는 toupper 사용

   첫째 줄에 입력된 단어에서 가장 많이 사용된 알파벳을 대문자로 출력

#include<iostream>
#include<string>

int main() {
  std::string str;
  std::string alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ?";
  int arr[27] = {};
  int max_cnt = 0, idx = 0;

  std::cin >> str;

  for (std::size_t i = 0; i < str.length(); i++) {
    str[i] = toupper(str[i]);
    arr[alpha.find(str[i])]++;
  }

  for (int i = 0; i < 27; i++) {
    if (arr[i] == 0)
      continue;
    if (max_cnt == arr[i]) {
      idx = 26;
    continue;
    }
    if (max_cnt < arr[i]) {
      max_cnt = arr[i];
      idx = i;
    }
  }
  std::cout << alpha[idx];
}

 

str  -> 입력받을 문자열

alpha  -> 대문자 알파벳 전체와 최대값이 여러 개일 경우 사용할 물음표 기호(?)

arr[27]  -> 사용된 알파벳의 개수 저장

max_cnt  -> 가장 많이 사용된 알파벳의 개수의 최대값

idx  ->  str의 위치를 나타내는 값 (ABCDEFGHIJKLMNOPQRSTUVWXYZ?)     

      -> idx = 26 이면, ?를 나타냄

 

toupper(str[i]) -> str배열에 있는 문자를 모두 대문자로 바꿔줌

 

ex) Mississipi

모두 대문자로 바꾸면 MISSISSIPI

alpha[i] alpha.find(str[i]) arr[alpha.find(str[i])] arr[i]
alpha[0] A alpha.find(str[0]) = M arr[12] = 1 arr[0] = 0
alpha[1] B alpha.find(str[1]) = I arr[8] = 1 arr[1] = 0
alpha[2] C alpha.find(str[2]) = S arr[18] = 1 arr[2] = 0
alpha[3] D alpha.find(str[3]) = S arr[18] = 2 arr[3] = 0
alpha[4] E alpha.find(str[4]) = I arr[8] = 2 arr[4] = 0
alpha[5] F alpha.find(str[5]) = S arr[18] = 3 arr[5] = 0
alpha[6] G alpha.find(str[6]) = S arr[18] = 4 arr[6] = 0
alpha[7] H alpha.find(str[7]) = I arr[8] = 3 arr[7] = 0
alpha[8] I alpha.find(str[8]) = P arr[15] = 1 arr[8] = 4
alpha[9] J alpha.find(str[9]) = I arr[8] = 4 arr[9] = 0
alpha[10] K     arr[10] = 0
alpha[11] L     arr[11] = 0
alpha[12] M     arr[12] = 1
alpha[13] N     arr[13] = 0
alpha[14] O     arr[14] = 0
alpha[15] P     arr[15] = 1
alpha[16] Q     arr[16] = 0
alpha[17] R     arr[17] = 0
alpha[18] S     arr[18] = 4
alpha[19] T     arr[19] = 0
alpha[20] U     arr[20] = 0
alpha[21] V     arr[21] = 0
alpha[22] W     arr[22] = 0
alpha[23] X     arr[23] = 0
alpha[24] Y     arr[24] = 0
alpha[25] Z     arr[25] = 0

가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력

-> 가장 많이 사용된 알파벳은 I(8번째)와 S(18번째)로 4번씩 사용됨

그러므로, ?(26번째)를 출력

 

'코딩테스트 > programming_C++' 카테고리의 다른 글

baekjoon #2908_상수_c++  (0) 2021.10.26
baekjoon #1152_단어의 개수_c++  (0) 2021.10.26
baekjoon #10809_알파벳 찾기_c++  (0) 2021.10.25
baekjoon #11720_숫자의 합_c++  (0) 2021.10.25
baekjoon #1065_한수_c++  (0) 2021.10.25