Problem Solving/BOJ

[백준 / BOJ] C++ 1157 단어 공부

nageune 2023. 2. 11. 04:10
728x90
반응형

1157번: 단어 공부

 

문제

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net

 

 

풀이

가장 많이 사용된 알파벳을 출력하는 문제이며 여러 개일 경우 '?'를 출력한다.

 

  1. 문자열을 입력받고 출력이 대문자이기 때문에 모든 문자를 대문자로 바꿔준다.
  2. 미리 만들어놓은 alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 문자열에서 차례대로 각 알파벳이 몇 개 들어있는지 계산해서 배열에 추가한다.
  3. 가장 높은 개수를 찾고 result에 가장 많이 사용된 알파벳을 저장한다.
  4. 가장 높은 개수를 가진 다른 문자가 있는지 검사한다.
  5. 검사 결과가 여러개이면 '?'를 출력하고 아닌 경우 result를 char형으로 바꾸어 출력한다.

 

 

코드

#include <bits/stdc++.h>
using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int arr[26] = {0};
  int max = 0, result, cnt = 0;
  string str, alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  cin >> str;
  for (int i = 0; i < str.length(); i++)
    if (str[i] >= 97 && str[i] <= 122)
      str[i] -= 32;
  for (int i = 0; i < alphabet.length(); i++)
    for (int j = 0; j < str.length(); j++)
      if (alphabet[i] == str[j])
        arr[i] += 1;
  for (int i = 0; i < 26; i++)
    if (arr[i] > max) {
      max = arr[i];
      result = alphabet[i];
    }
  for (int i = 0; i < 26; i++)
    if (arr[i] == max)
      cnt++;
  if (cnt > 1)
    cout << '?' << '\n';
  else
    cout << (char)result << '\n';
  return 0;
}

 

728x90
반응형