반응형
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 공부 (1157)
[ 문제 ]
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
[ 입력 ]
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
[ 출력 ]
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
[ 코드 ]
#include <iostream>
using namespace std;
int main() {
string ch; // 입력받을 문자
int a[26] = { 0, }; // 해당 알파벳 개수 카운트 배열
int b; // 해당 알파벳의 아스키코드를, a[]배열에 저장시킬 값
cin >> ch; // 문자열 입력받기
// 입력받은 문자열 대문자로 변경
for (int i= 0; i < ch.size(); i++)
{
ch[i] = toupper(ch[i]);
}
// 문자열의 문자 각각 아스키코드로 변환해서, 알파벳 개수 세기
for (int i = 0; i < ch.size(); i++)
{
b = int(ch[i]) - 65;
a[b] += 1;
}
int max = 0; // 최대값
int cb = 0; // 문자로 다시 변환시키기 위한 변수
// 최대 빈도 문자 찾기
for (int i = 0; i < 26; i++)
{
if (max < a[i])
{
max = a[i];
cb = i;
}
}
int count = 0; // 최대빈도와 같은 문자 개수 세는 변수
// 최대 빈도와 같은 문자가 2개 이상인지 찾기
for (int i= 0; i < 26 ; i++)
{
if (max == a[i]) { // 만약 최대 빈도와 같은 값을 지닌다면
count++; // count ++;
if (count > 1) // 만약 최대빈도와 같은 문자가 2개 이상 나온다면
{
cout << "?" << endl;
return 0; // 함수를 마치기
}
}
}
// 최대 빈도 문자 대문자로 출력하기
cout << (char)(cb + 65) << endl;
return 0; // 함수를 마치기
}
* 유의사항 - 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다. - 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다. - 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :) |
반응형
'문과 코린이의, [C. C++] 기록 > C++ 백준 문제풀이' 카테고리의 다른 글
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 뒤집기 (9093) (0) | 2021.07.06 |
---|---|
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 스택 (10828) (0) | 2021.07.06 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 다이얼 (5622) (0) | 2021.06.30 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 상수 (2908) (0) | 2021.06.30 |
[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어의 개수 (1152) (0) | 2021.06.29 |