본문 바로가기
Algorithm/Baekjoon

[백준/BOJ] 1157번 - 단어 공부 (C++)

by shine-jung 2021. 7. 6.
반응형

문제 링크

 

코딩하기 전 생각하기

/*
문자열을 순회하면서 알파벳 개수를 벡터에 count하자.
count 벡터의 최대값을 알아내자.
최대값이 0이거나,
알파벳의 사용 수가 최대값과 같은 경우가 2번 이상이면 물음표를 출력한다.
그렇지 않으면, 가장 많이 사용된 알파벳을 대문자로 출력한다.
*/

 


 

코드

#include <iostream>
#include <bits/stdc++.h>
using namespace std;

int main() {
    string str;
    cin >> str;

    vector<int> count(26, 0);

    for ( char c : str ) {
        int index;
        if ( c >= 'a' )
            index = c - 'a';
        else
            index = c - 'A';
        count[index]++;
    }
    
    int max = *max_element(count.begin(), count.end());

    if ( max == 0 ) {
        cout << "?";
        return 0;
    }

    int max_count = 0;
    int max_i;
    for ( int i = 0; i < 26; i++ ) {
        if( count[i] == max ) {
            max_count++;
            max_i = i;
        }
    }
    if ( max_count > 1 ) {
        cout << "?";
    }
    else {
        cout << (char)(max_i + 'A');
    }
}

 


 

느낀점

 

어렵지 않게 통과할 수 있었다.

max_element를 사용할 때 유의할 점은 값 자체를 반환하지 않고 값의 주소를 반환한다는 점이다.

 

(주의) 기록용으로 작성한 글입니다. 코드가 허접하거나 알고리즘의 효율이 낮을 수 있습니다.

댓글 환영합니다!

반응형

댓글