알고리즘/문제 풀이

1157번: 단어 공부

Themion 2021. 12. 7. 13:04

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