Development./Problem solving.

[BAEKJOON] 1157 - 단어 공부

Chuuu_DevCamp:) 2020. 8. 17. 19:26
반응형

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

문자열을 입력 받은 후, 해당 문자열에 가장 많이 포함된 alphabet을 구하는 문제다.
map에 각 alphabet별 개수를 저장 해 두고, 개수를 기준으로 오름차순으로 정렬하여 0번째, 1번째 item이 같은 개수를 가지면 ?를 출력하고, 아닐 경우 0번째 item을 출력하도록 구현하였다.

 

#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>

// pair의 second value를 기준으로 sort하는 template 구조체 선언
template<template <typename> class P = std::less >
struct compare_pair_second {
    template<class T1, class T2> bool operator() (const std::pair<T1, T2> &left, const std::pair<T1, T2> &right) 
    {
        return P<T2>()(left.second, right.second);
    }
};

int main()
{
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    std::cout.tie(NULL);

    // map 선언 & alphabet을 key값으로 초기화.
    std::map<char, int> M;
    for(int idx = 0; idx < 27; idx++)
    {
        M.insert(std::make_pair('A' + idx, 0));
    }
    
    // input으로 string을 받고, 그 string을 전부 대문자로 변환
    std::string S;
    std::cin >> S;
    std::transform(S.begin(), S.end(), S.begin(), ::toupper);
    int sLen = static_cast<int>(S.length());
    // map에 string alphabet별 개수 count
    for(int idx = 0; idx < sLen; idx++)
    {
        M[S[idx]]++;
    }

    // map의 item을 vector로 변환 & pair의 second를 내림차순으로 sort
    std::vector<std::pair<char, int> > V(M.begin(), M.end());
    std::sort(V.begin(), V.end(), compare_pair_second<std::greater>());

    // top item과 next item 비교 & 결과에 따라 출력
    if (V[0].second == V[1].second)
        std::cout << '?';
    else
        std::cout << V[0].first;
    return 0;
}

'Development. > Problem solving.' 카테고리의 다른 글

[BAEKJOON] 2468 - 안전 영역  (0) 2020.08.17
[BAEKJOON] 1316 - 그룹 단어 체커  (0) 2020.08.17
[BAEKJOON] 2675 - 문자열 반복  (0) 2020.08.17
[BAEKJOON] 4963 - 섬의 개수  (0) 2020.08.17
[BAEKJOON] 2884 - 알람 시계  (0) 2020.08.17