Link https://www.acmicpc.net/problem/1157
소스결과 4880 KB / 44 ms
출처 Baekjoon
언어 C++ 17
분류 문자열 처리
설명
알파벳 대소문자로 이루어진 단어가 주어지면, 그 단어에서 가장 많이 쓰인 알파벳을 대문자로 출력한다.
대, 소문자를 구별하지 않으면서 출력은 대문자로 해야한다. 라는 조건은 편하게 하려면 대문자로 계산하는게 마음 편한다로 보인다.
따라서 입력 받은 단어에 대해서 소문자인 경우 대문자로 변환하거나 생각하게 하는 부분을 알고리즘에 넣어야 한다.
여러개가 존재 한다면 ?를 출력해야 한다. 이 조건을 위해 출력 전에 조절이 필요하다.
알파벳의 갯수를 대문자 기준으로 세서 출력 해준다는 알고리즘을 만들자.
알고리즘
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;
}
'Algorithm > 문자열 처리' 카테고리의 다른 글
Baekjoon 6324 URLs (0) | 2019.03.08 |
---|---|
BaekJoon 2864 5와 6의 차이 (0) | 2019.01.29 |
BaekJoon 1475 방번호 (0) | 2019.01.17 |
BaekJoon 1152 단어의 개수 (0) | 2019.01.05 |
BaekJoon 8595 히든넘버 (0) | 2019.01.02 |