[백준 1157] 단어공부

alsry._.112·2023년 7월 26일
0

백준

목록 보기
4/102
post-thumbnail

🔗문제 풀러가기
단계별로 풀어보기 단계 6의 5번째 문제이다.

문제 분석

이 문제는 아스키코드에 대한 지식이 있어야 풀 수 있다.
나는 이 문제를 a~z까지의 값을 가지고 있는 배열을 선언하여 풀었다.

코드

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string input;

	cin >> input;

	int alphaCounts[26] = { 0 };

	int maxCount = 0;
	int maxIndex = -1;

	bool isOverLap = false;

	for (int i = 0; i < input.length(); i++)
	{
		input[i] = toupper(input[i]);
	}

	for (char ch : input)
	{
		alphaCounts[ch - 'A']++;
	}

	for (int i = 0; i < 26; i++)
	{
		if (alphaCounts[i] > maxCount)
		{
			maxCount = alphaCounts[i];
			maxIndex = i;
		}
	}

	for (int i = 0; i < 26; i++)
	{
		if (alphaCounts[i] == maxCount && i != maxIndex)
		{
			isOverLap = true;
			break;
		}
	}
	

	if (isOverLap)
	{
		cout << "?";
	}
	else
	{
		cout << (char)(maxIndex + 'A');
	}
}

해석

string을 입력 받은 후 toupper을 통해 모두 대문자로 바꾸어 준다.

범위기반 for문을 통해 alphaCounts배열에 알파벳의 맞는 값들을 넣어둔다.
(counts[0]('A'를 나타냄)은 1, counts[1]('B'를 나타냄)는 2...)

그 후 알파벳의 개수인 26번 만큼 for문을 돌려 가장 많이 사용된 알파벳을 구해 가장 많이 사용된 알파벳이 여러개면 ?를, 아니라면 그 알파벳을 출력하면 끝!

profile
소통해요

0개의 댓글