[BOJ] 1157 단어 공부

GirlFriend-Yerin·2020년 8월 26일
0

알고리즘

목록 보기
54/131

Note

알파벳 대소문자로 이루어진 단어가 주어지면, 그 단어에서 가장 많이 쓰인 알파벳을 대문자로 출력한다.

대, 소문자를 구별하지 않으면서 출력은 대문자로 해야한다. 라는 조건은 편하게 하려면 대문자로 계산하는게 마음 편한다로 보인다.
따라서 입력 받은 단어에 대해서 소문자인 경우 대문자로 변환하거나 생각하게 하는 부분을 알고리즘에 넣어야 한다.
여러개가 존재 한다면 ?를 출력해야 한다. 이 조건을 위해 출력 전에 조절이 필요하다.
알파벳의 갯수를 대문자 기준으로 세서 출력 해준다는 알고리즘을 만들자.

알고리즘

  1. 문자열 s를 받는다.
  2. 문자열 s의 index 0 부터 길이 len-1까지 반복하면서 알파벳 개수를 헤아리는 배열의 수를 증가 시킨다.
    2 - 1. 소문자의 경우 ['a' - 'A'] 의 값 만큼 뺀다.
    2 - 2. [인덱스의 값 - 'A'] 의 값에 해당하는 알파벳 개수를 헤아리는 배열의 값을 1 증가시킨다.
  3. 가장 많이 발견된 알파벳의 값을 찾는다.
  4. 가장 많이 발견된 알파벳의 값을 가진 문자를 찾아 결과값으로 지정한다. 문자가 2개 이상이 된다면 결과 값을 ?로 바꾼다.
  5. 출력

소스코드

#include <iostream>
#include <string>

using namespace std;

int alphaCount[26];

int main()
{
	int maxCount = 0;
	int res = -1;
	string input;

	cin >> input;

	for (int i = 0; i < input.length(); i++)
	{
		if ('a' <= input[i] && input[i] <= 'z')
			input[i] -= ('a' - 'A');
		alphaCount[(input[i] - 'A')]++;
	}

	for (int i = 0; i < 26; i++)
		if (maxCount < alphaCount[i])
			maxCount = alphaCount[i];

	for (int i = 0; i < 26; i++)
	{
		if (maxCount == alphaCount[i])
		{
			if (res >= 0)
			{
				res = '?';
				break;
			}
			else
				res = i;

		}
	}

	cout << char(res < 26 ? res + 'A' : res);

	return 0;
}

2019-01-17 10:55:11에 Tistory에서 작성되었습니다.

profile
개발할때 가장 행복한 개발자입니다.

0개의 댓글