cpp) 백준 1157: 단어 공부
본문 바로가기
코딩 테스트/백준 (C++, Python)

cpp) 백준 1157: 단어 공부

by NEWSUN* 2023. 6. 7.

Problem

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

 

1157번: 단어 공부

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

www.acmicpc.net

알파벳 대소문자로 된 단어가 주어질 때, 이 단어에서 가장 많이 사용된 알파벳을 출력한다. 가장 많이 사용된 알파벳이 여러 개 존재하는 경우 '?'를 출력한다. 대문자와 소문자를 구분하지 않는다.

 

 

Solution

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

int main(){
    ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

    int arr[26]={0,};  // 배열 0으로 초기화
    string s;

    cin >> s;

    for(int i=0;i<s.length();i++){
        // 소문자를 대문자로 바꿔줌 (아스키코드 이용)
        if(s[i]>='a' && s[i]<='z'){
            s[i] = s[i]-32;
        }
        // 빈도수 구하기 (A의 경우 arr[0])
        arr[s[i]-'A']++;
    }

    // 최대 빈도수 구하기
    int max = 0;
    max = *max_element(arr,arr+26);

    // 중복된 빈도수가 있는지 체크
    int cnt = 0;

    int result;
    
    for(int i=0;i<26;i++){
        if(arr[i]==max){
            result = i;
            cnt++;
        }
    }

    if(cnt==1)
        cout << char('A'+result) << '\n';
    else 
        cout << '?' << '\n';

    return 0; 
}

 

- 아스키코드표에 따르면, 소문자를 나타내는 숫자에서 32를 빼면 대문자를 나타내는 숫자로 표현할 수 있다.

- max_element(배열 또는 벡터) 함수는 값 자체를 리턴하지 않고 그 값의 주소를 리턴하기 때문에 값을 참조하려면 *를 붙여줘야 한다.