문제
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
준비물
string - 문자열로 입력받기 위함.
toupper() - 알파벳 대소문자를 구분하지 않기 위해 모두 대문자로 바꿔주기 위함.
코드
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
char Solution(string str){
int count[26] = {0};
int max = 0;
char resulte;
bool isMulti = true;
for(int Index : str){
Index = toupper(Index) - 'A';
count[Index]++;
if(count[Index] == max){
isMulti = true;
}
else if(count[Index] > max){
isMulti = false;
max = count[Index];
resulte = (char)(Index + 'A');
}
}
if(isMulti) return '?';
else return resulte;
}
int main(){
string str;
cin >> str;
cout << Solution(str);
return 0;
}
풀이
1. str변수로 입력받고, 문자 하나하나 조회한다
2, 조회되는 문자는 대소문자를 구별하지 않기 위해 무조건 대문자로 변환하고, 'A'만큼 빼준다
여기서 'A'를 빼주는 이유는 count배열의 인덱스와 호환해주기 위함이다. ex) 'A'-'A'=0/'B'-'A'=1
3. count배열에 각각의 알파벳의 등장 횟수를 기록한다.
4. 큰 값이 나올 때면 max변수에 저장해주는데, 값이 같다면 isMulti변수에 중복 체크를 해준다
여기서 isMulti변수의 초기값이 true인 이유는 처음엔 알파벳이 없기 때문에 모두 중복이다
end. 이렇게 해서 최대 값과, 중복이 있는지 체크해서 문제를 풀 수 있다.
TML
max의 역할과 resulte의 역할이 비슷하지 않나?
처음엔 최대 값을 알리는 max변수와 최고 횟수를 알리는 resulte변수를 나누지 않고 최대 값을 알리는 알파벳의 인덱스라는 변수로 합쳐 사용했지만 입력되는 문자열이 없을 때 초기값으로 무엇을 줄지 애매해서 나누었다.
그런데 굳이 바꿀 필요는 없었고 if문 한 줄 추가하면 되었겠다..
'프로그래밍 문제집 > 백준' 카테고리의 다른 글
1181번-단어 정렬 (0) | 2022.01.24 |
---|---|
1018번-체스판 다시 칠하기 (0) | 2022.01.24 |
2675번-문자열 반복 (0) | 2022.01.21 |
1152번-단어의 개수 (0) | 2022.01.20 |
1463번-1로 만들기 (0) | 2022.01.19 |