Notice
Recent Posts
Recent Comments
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Today
Total
Archives
관리 메뉴

cyphen156

백준-심화 1 1157 단어 공부 본문

컴퓨터공학/알고리듬 풀이

백준-심화 1 1157 단어 공부

cyphen156 2025. 1. 24. 14:48

단어 공부

대소문자 구분 없이 알파벳 갯수를 세어 가장 많이 나온 철자를 리턴하면 되는 프로그램

문자열 입력 받고 전부 대/소문자로 변환한 뒤 카운팅 하거나 둘을 동시에 처리하면 된다.

아스키 값을 기준으로  처리하면 편하다.

제약사항

  • 0 <= strlen <= 1,000,000
  • 최빈값이 두 개 이상이라면 '?'를 출력하라

주의 사항

없다.

CPP 풀이

단어 공부_1157.cpp

/**
 * 백준 단어 공부_1157
 * 대소문자 구분 없이 알파벳 갯수를 세어 가장 많이 나온 철자를 리턴하면 되는 프로그램.
 * 
 * 제한사항
 *****************************************
 * 0 <= strlen <= 1,000,000              *
 * if most Used Alpha Case is not only One
 * return '?'                            *
 *****************************************
 *
 *
 *
 * 주의
 * 
 * 
 * 풀이시간 60분
 */


#include <iostream>
#include <cctype>

using namespace std;

int main(void)
{
    int alpha[26] = { 0 }; // char cnt
    int mostManyUsed = -1; // char index
    bool isMultiple = false;
    string str;
    cin >> str;

    // 문자열 빈도 누계
    for (int i = 0; i < str.length(); ++i)
    {
        int idx = toupper(str[i])-'A';
        alpha[idx]++;
    }

// 0번 인덱스가 문제가 되는디...
    for (int i = 0; i < 26; ++i)
    {
        if (alpha[i] > alpha[mostManyUsed] || i == 0)
        {
            mostManyUsed = i;
            isMultiple = false;
        }
        else if (alpha[i] == alpha[mostManyUsed])
        {
            isMultiple = true;
        }
    }

    if (isMultiple)
    {
        cout << '?' << endl;
    }
    else
    {
        cout << char(mostManyUsed + 'A') << endl;
    }
    return 0;
}

모든 예제 코드의 소스파일은 제 개인 깃허브 레포지토리 에 있습니다.

Workspace/알고리듬 풀이 at main · cyphen156/Workspace · GitHub

 

Workspace/알고리듬 풀이 at main · cyphen156/Workspace

Studying . Contribute to cyphen156/Workspace development by creating an account on GitHub.

github.com