알고리즘/백준 알고리즘

1157-단어공부 c++

TIM_0529 2022. 12. 26. 15:47
반응형
반응형
#include <iostream>
#include <string>
using namespace std;


//아스키코드 : 대문자 65~90, 소문자 97~122
int alpha[26], cnt = 0;
string input;

int main() {
    cin >> input;

    for (int i = 0; i < input.length(); i++) {
        input[i] = toupper(input[i]);	// 모두 대문자로 변경
        alpha[input[i] - 65]++;			// 65를 빼서 인덱스 위치 구해서 저장 후 증감
    }

    int max = 0, max_indx = 0;

	
    for (int i = 0; i < 26; i++) {		// 가장 많이 사용된 단어에 빈도수를 저장
        if (max < alpha[i]) {
            max = alpha[i];
            max_indx = i;
        }
    }
    for (int i = 0; i < 26; i++) {
        if (max == alpha[i]) cnt++;		// 가장 많이 나온 단어가 몇 게 인지 췤
    }
    if (cnt > 1) cout << "?";
    else cout << (char)(max_indx + 65);
}

이 문제는 이중 for문을 사용하면 시간 초과가 일어날 수 있다는 점을 생각해서 풀어야 한다.

입력된 문자들을 모두 대문자로 변경 후, 아스키 코드를 이용해서 alpha 배열에 저장 한다.

대문자가 65부터 시작하니까 모든 문자에서 65만큼 빼면 0 ~ 26 까지 크기에 인덱스에 저장이 된다.

그리고 후위증감연산자를 통해 빈도수 췤

 

반응형

'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

[백준] 5622 - 다이얼  (0) 2022.12.28
2908 - 상수  (2) 2022.12.28
2675-문자열 반복  (0) 2022.12.25
10809-알파벳 찾기  (2) 2022.12.24
11720 - 숫자의 합  (0) 2022.12.24