https://www.acmicpc.net/problem/1157
1157번: 단어 공부
알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
www.acmicpc.net
char형 변수를 인덱스로 변환시켜 배열에 접근하는 법을 알면 간단하게 풀 수 있다.
#include <cstdio>
#define MAX_LEN 1000000
// 단어를 저장할 공간
char str[MAX_LEN];
// times[i]: i번째 알파벳의 등장 횟수
int times[26];
int main() {
// idx: 단어의 각 글자를 인덱스로 바꾼 값
// most: 가장 많이 등장한 알파벳의 인덱스
int idx, most = 0;
// 단어를 입력받은 뒤
scanf("%s", str);
// 단어의 각 글자에 대해
for (int i = 0; str[i]; i++) {
// 글자를 알파벳의 순서에 맞는 인덱스로 변경
idx = str[i] - ((str[i] >= 'a') && (str[i] <= 'z') ? 'a' : 'A');
// 각 알파벳의 등장 횟수와 가장 많이 등장한 알파벳을 차례로 갱신
times[idx] += 1;
if (times[most] < times[idx]) most = idx;
}
// most만큼 등장한 알파벳이 most 외에 있다면 most를 ?로 갱신
for (int i = 0; i < 26; i++)
if (i != most && times[i] == times[most]) {
most = '?' - 'A';
break;
}
// 가장 많이 나온 알파벳을 출력
printf("%c\n", most + 'A');
return 0;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
1167번: 트리의 지름 (0) | 2021.12.07 |
---|---|
1158번: 요세푸스 문제 (0) | 2021.12.07 |
1152번: 단어의 개수 (0) | 2021.12.07 |
1149번: RGB거리 (0) | 2021.12.06 |
1110번: 더하기 사이클 (0) | 2021.12.06 |