티스토리 뷰

반응형

https://www.acmicpc.net/problem/1157

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net


⊙ 문제

⊙ 입력

⊙ 출력

⊙ 예제 입출력

⊙ 알고리즘 분류

  • 구현
  • 문자열

 


 

⊙ 문제 접근 과정

 

소문자 알파벳대문자 알파벳의 차이32

A와 Z의 차이25

 

A = '65', Z = '90'

a = '97', z = '122'

 

 

이 문제의 해결 포인트! 빈도수를 저장하는 배열 alpha를 만들어줬다.

그리고 해당 알파벳의 빈도수를 0부터 25의 공간에 저장해줬다.

왜냐하면 A와 Z의 차이는 25이기 때문이다.

 

그리고 빈도를 저장한 alpha에 대해 가장 자주 나온 index와 해당 알파벳을 찾고 저장해준다.

 

마지막으로 해당 알파벳이 유일한 최다 빈도수인지 아닌지 확인해주고

유일한 최다 빈도수라면 아스키코드를 통해 출력, 아니라면 ?를 출력해줬다.

 

코드 주석에도 자세히 적어놨다.


 

⊙ 문제 풀이

 

#include <iostream>

using namespace std;

int alpha[26], cnt =0;
string input;
//아스키코드 : 대문자 65~90, 소문자 97~122

int main() {
    cin >> input;

    //빈도수 체킹
    for(int i=0;i<input.length();i++) {
        if(input[i]<97) alpha[input[i] - 65]++; //대문자
        else alpha[input[i] - 97]++; //소문자
    }

    int max = 0, max_indx=0;

    for(int i=0;i<26;i++) {
        if(max<alpha[i]) {
            max=alpha[i];
            max_indx = i;
        }
    }
    //가장 많이 사용된 알파벳이 여러개인가?
    for(int i=0;i<26;i++) {
        if(max==alpha[i]) cnt++;
    }
    //여러개라면 ? 출력, 아니라면 대문자로 출력
    if(cnt>1) cout << "?";
    else cout << (char)(max_indx+65);
}

⊙ 결과

 


⊙ 마무리

 

 

NONE

 

좋아요 로그인하지 않아도 누를 수 있습니다!

728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함