문제링크 : https://www.acmicpc.net/problem/1157
문제풀이
① A부터 Z까지 길이가 26인 배열을 만든다.
② 입력받은 문자열을 모두 대문자로 변환한다.
③ 아스키 문자표에서 A는 65에 해당한다.
따라서 입력받은 문자 하나씩 차례로 65를 빼 인덱스로 사용한다.
④ 위에서 구한 인덱스에 해당하는 값을 증가시킨다.
예) Mississipi

⑤ 위 배열을 차례로 돌면서 가장 큰 값을 가지고 있는 인덱스를 구한다.
⑥ 가장 큰 값이 중복으로 나오면 인덱스를 -1로 저장한다.
⑦ 인덱스가 -1이면 '?'를, -1이 아니면 그에 해당하는 문자를 출력한다.
소스코드
/*
* 백준 1157번: 단어 공부
*/
#include <iostream>
#include <string>
using namespace std;
int main() {
string word;
getline(cin, word);
int arr[26] = {0, };
for (int i = 0; i < word.length(); i++) {
int idx = toupper(word[i]) - 65;
arr[idx]++;
}
int max = 0;
int index = 0;
for (int i = 0; i < 26; i++) {
if (max < arr[i]) {
max = arr[i];
index = i;
}
else if (max == arr[i]) {
index = -1;
}
}
char result = index == -1 ? '?' : index + 65;
cout << result;
return 0;
}'Algorithm > 문제풀이' 카테고리의 다른 글
| [백준] 6064번: 카잉 달력 (0) | 2019.05.22 |
|---|---|
| [백준] 1475번: 방 번호 (0) | 2019.05.21 |
| [백준] 1924번: 2007년 (0) | 2019.05.19 |
| [백준] 2775번: 부녀회장이 될테야 (0) | 2019.05.19 |
| [백준] 10250번: ACM 호텔 (0) | 2019.05.18 |