#50. 백준 1157번 문제 풀이: 단어 공부 | 문제 원본 보기 |
--입력-- Mississipi --출력-- ? --입력-- zZa --출력-- Z --입력-- z --출력-- Z --입력-- baaa --출력-- A
다음 순서로 루틴을 작성하면 된다. 1. 대소문자 구분을 안한다고 했고, 대문자로 출력하라고 했으니 문자열을 모두 대문자로 변경해 준다. 2. 알파벳 26자에 대한 배열을 만들고 0으로 초기화 한다. 3. 문자열을 하나씩 확인하며 해당하는 문자 배열값을 +1씩 증가해 준다. 4. 문자 카운트 배열에서 제일 큰값을 찾아낸다. 5. 제일 큰값을 가진 알파벳을 찾아낸다. 두개 이상일 경우 ? 를 출력한다.
#include <iostream>
using namespace std;
int main() {
int i, l, maxn;
int cks[26] = {0}; // 알파벳 개수만큼 0으로 초기화된 리스트를 만든다.
string s; // 문자열 받을 배열
int an = (int)'A'; // 문자를 순서값으로 만들기 위해 A의 아스키코드값을 대입
char maxa = ' '; // 가장 많이 사용된 알파벳을 저장할 변수. 초기값 공백
cin >> s; // 문자열을 입력받는다.
l = s.length();
for(i = 0; i < l; i++ ) {
cks[toupper(s[i]) - an] +=1;
// 문자를 대문자로 만들어주고 'A'코드값을 빼주면 알파벳 순서값이 된다.
// 해당 문자의 값(사용횟수)을 +1 증가시켜준다.
}
maxn = 0; // 가장 많이 사용한 횟수. 초기값 0
for(i = 0; i < 26; i++) { // 체크레스트에서 제일 큰값을 찾는 과정
if(maxn < cks[i]) maxn = cks[i]; // 새로운 값이 더 크면 그 값을 최대값으로
}
for(i = 0; i < 26; i++) { // 제일 많이 사용된 알파벳 찾기
if(cks[i] == maxn) { // 제일 큰값이면
if(maxa != ' ') { // 이미 다른 값이 있다면 ? 대입하고 루프 끝냄
maxa = '?'; break;
}
maxa = (char)(i + an); // 순서값에 'A' 코드값을 더해서 문자로 변환 대입
}
}
cout << maxa; // 최대사용 알파벳 출력
return 0;
}