Programing/백준, 프로그래머스(C++)

[C++][백준 1157] 단어 공부

hye3193 2024. 12. 31. 16:18

https://www.acmicpc.net/problem/1157

제출 코드

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string word;
    cin >> word;
    int count[26] = {};
    int max;
    bool e = false;

    for (int i = 0; i < word.length(); i++)
    {
        char target = (word[i] < 91) ? word[i] : word[i] - 32;
        count[target - 'A']++;
    }

    max = 0;
    for (int i = 1; i < 26; i++)
    {
        if (count[i] > count[max])
        {
            max = i;
            e = false;
        }
        else if (count[i] == count[max])
        {
            e = true;
        }
    }

    if (e) cout << '?' << endl;
    else cout << char(max + 'A') << endl;
}

아스키 코드표를 참고해서 91 미만(대문자)이라면 그대로 두고, 소문자라면 대소문자 차이인 32를 빼서 저장시켰다

max인 문자 찾는 것과 ? 출력하는 부분은 복호화 문제(https://hye3193.tistory.com/161)와 동일하게 해결했다

 

i번째 count가 기존 max를 초과하면 max 인덱스를 변경해주고, e도 false로 초기화해준다

만약 i번째 count가 기존 max와 동일하면 max가 두 개 존재한다는 것이므로 e를 true로 설정해준다