[BOJ] 9046 복호화 c++

gw07167·2023년 6월 8일

문제 링크

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

핵심 알고리즘

문제의 알고리즘보다 문자열을 입력받는 cin을 기억하고자 블로그를 작성한다.

공백포함 문자열을 입력받기 위해 getline(cin, str)을 사용했는데

예제에서 3을 문자열로 입력받아서 다음 문자열을 입력받지 못하였다.

이에 대한 해결은 cin.ignore() 을 사용하는 것이다.

이 함수는 입력 버퍼를 비워주는 역할을 수행한다

이를 사용하지 않으면 "\n"을 입력받을 수 있기 때문이다

최종 코드

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include <stack>
#include <tuple>
#include <set>
#include <unordered_map>
#include <map>
#include <cmath>
#include <sstream>
#include <list>
using namespace std;

int main(void) {
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int t;
    cin >> t;
    cin.ignore();

    while(t--) {
        string str;
        getline(cin, str);

        int arr[27] = { 0, };
        int mcnt = 0;

        for (int i = 0; i < str.size(); i++) {
            if (str[i] == ' ')
                continue;
            arr[str[i] - 'a']++;
            mcnt = max(mcnt, arr[str[i] - 'a']);
        }
        
        int flag = 0; char c;

        for (int i = 0; i < 26; i++) {
            if (arr[i] == mcnt) {
                if (flag == 0) {
                    c = i + 'a';
                    flag = 1;
                }
                else {
                    c = '?';
                    break;
                }
            }
        }

        cout << c << "\n";
    }
    
}
profile

0개의 댓글