본문 바로가기
C++/백준 코딩테스트 풀이 C++

C++ 1157 단어공부

by jjiing 2022. 6. 24.

 

문자열에 관한 문제는 아스키코드를 활용하는 것이 많다.

아스키코드에 대해 공부해 활용할 수 있어야 문제 풀이를 생각할 때 훨씬 유용할 것 같다.

 

우선 단어를 대소문자 관련없게 알파벳 카운트를 받아 count 변수에 담아줘야 편리하다.

그 후 가장 많이 나온 알파벳을 구해주고, overlap이라는 불 변수를 활용해 문제에서 언급하는 예외사항에 대해 처리해준다.

#include <iostream>
#include <string>
using namespace std;
int main()
{


	int count[26] = { 0 };
	string word;
	cin >> word;
    
    //대소문자 상관없이 알파벳 별 개수 받기
	for (int i = 0; i < word.length(); i++)
	{
		if (word[i] < 97)	//대문자면 65를 빼고
			word[i] -= 65;
		else				//소문자면 97을 뺌
			word[i] -= 97;

		count[word[i]]++;

	}


	int maxIndex = 0;
	int maxNum = 0;
	bool overlap = false;
	
    //최빈 알파벳 구하기
	for (int i = 0; i < 26; i++)
	{
		if (maxNum < count[i])
		{
			maxNum = count[i];
			maxIndex = i;
			overlap = false;
		}
		else if (count[maxIndex] == count[i])
			overlap = true;
	}


	if (overlap)
		cout << "?";
	else
		cout << char(maxIndex + 65);


}

'C++ > 백준 코딩테스트 풀이 C++' 카테고리의 다른 글

C++ 1085 직사각형에서 탈출 / 제곱 / 제곱근 / 최소값  (0) 2022.06.27
C++ 3052 나머지  (0) 2022.06.27
C++ 1546 평균  (0) 2022.06.22
C++ 2908 상수  (0) 2022.06.21
C++ 2577 숫자의 개수  (0) 2022.06.20