본문 바로가기

문과 코린이의, [C. C++] 기록/C++ 백준 문제풀이

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 공부 (1157)

반응형

[문과 코린이의 IT 기록장] C++ 백준 문제풀이 - 단어 공부 (1157)

[문과 코린이의 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; // 함수를 마치기
}

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형