문제
풀이
이 문제는 단어를 입력받고 그 중에서 가장 많이 사용된 알파벳을 출력하는 문제입니다. 만약 가장 많이 사용된 알파벳이 2개이상인 경우에는 ?를 출력하면 됩니다. 이 문제는 전에 풀었던 알파벳 찾기 문제를 참고하여 각 알파벳이 몇번 사용되었는지 확인하면 되는 비교적 쉬운 문제입니다. (물론 알파벳 찾기 문제를 풀었다는 전제입니다)
https://liveloper-jay.tistory.com/118
그런데 이 문제에서는 대문자와 소문자를 둘 다 입력할 수 있다는 조건이 있으므로 알파벳이 몇번 나왔는지를 셀 때, 대문자가 나온경우 해당 문자에서 A를 빼주고 그에 해당하는 값 value에 대한 alpha[value] 배열의 값을 1 증가 시켜주고, 소문자가 나온경우 a를 빼주고 동일하게 수행하면 됩니다.
추가적으로 가장 많이 사용된 알파벳의 수가 2개 이상인 경우에는 ?를 출력하여야 하므로 최대값 max를 지정해주고 max와 어느 특정한 배열의 순번 값 alpha[i] 와 같으면 flag 값을 0에서 1로 바꾸어줍니다. 최종적으로 flag값이 0인경우에는 최대값을 출력, flag가 1인경우에는 ?를 출력해주면 됩니다. 소스코드는 아래와 같습니다.
추가
제가 왜 이런 방식으로 풀이를 진행했는지는 잘 모르겠으나, flag값을 지정해 줄 필요 없이 max와 alpha[i]의 값이 같은 경우에 바로 ?를 출력하고 프로그램을 종료시키는 방법이 있어 추가해봅니다. (이 방법이 더 적절한 것 같네요 ㅎㅎ;;)
소스코드
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char input[1000001];
int value=0, alpha[26]={0,};
cin >> input;
for (int i = 0; i < strlen(input); i++)
{
if ('A'<=input[i] && input[i]<='Z'){
value= input[i]- 'A';
alpha[value]++;
}else if('a'<=input[i] && input[i]<='z'){
value= input[i]- 'a';
alpha[value]++;
}else ;
}
int max= 0;
int flag =0;
char num ;
for (int i = 0; i < 26; i++)
{
if (max<alpha[i]){
max=alpha[i];
num=i+65;
cnt=0;
}
else if (max==alpha[i]) cnt ++;
else;
}
if (flag==0) cout << num ;
else cout << '?';
}
'Algorithm > Python, C++' 카테고리의 다른 글
백준 5622_다이얼 [C++] (0) | 2022.07.10 |
---|---|
백준 2908_상수 [C++] (0) | 2022.07.09 |
백준 2675_문자열 반복 [C++] (0) | 2022.07.05 |
백준 10809_알파벳찾기 [C++] (0) | 2022.07.04 |
백준 11720_숫자의 합 [C++] (0) | 2022.07.04 |
댓글