백준 1157_단어 공부 [C++]
본문 바로가기
Algorithm/Python, C++

백준 1157_단어 공부 [C++]

by liveloper jay 2022. 7. 7.

문제

 

 

풀이

 이 문제는 단어를 입력받고 그 중에서 가장 많이 사용된 알파벳을 출력하는 문제입니다. 만약 가장 많이 사용된 알파벳이 2개이상인 경우에는 ?를 출력하면 됩니다. 이 문제는 전에 풀었던 알파벳 찾기 문제를 참고하여 각 알파벳이 몇번 사용되었는지 확인하면 되는 비교적 쉬운 문제입니다. (물론 알파벳 찾기 문제를 풀었다는 전제입니다)

https://liveloper-jay.tistory.com/118

 

백준 10809_알파벳찾기 [C++]

문제 풀이  이 문제는 입력받은 단어의 각 알파벳이 몇번째에서 나오는지를 a~z까지 출력해주는 문제입니다. 만약 해당 알파벳이 나왔다면 0번째부터 순서를 출력하면 되고, 알파벳이 나오지 않

liveloper-jay.tistory.com

 

 그런데 이 문제에서는 대문자와 소문자를 둘 다 입력할 수 있다는 조건이 있으므로 알파벳이 몇번 나왔는지를 셀 때, 대문자가 나온경우 해당 문자에서 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

댓글