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