알고리즘/문제 풀이

백준 9933 - 민균이의 비밀번호(C++)

qqlzzb 2022. 10. 30. 23:00

문제

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

 

9933번: 민균이의 비밀번호

첫째 줄에 단어의 수 N (2 ≤ N ≤ 100)이 주어진다. 다음 N개 줄에는 파일에 적혀있는 단어가 한 줄에 하나씩 주어진다. 단어는 알파벳 소문자로만 이루어져 있으며, 길이는 2보다 크고 14보다 작은

www.acmicpc.net

 

풀이

입력되는 문자열 중에서 특정 문자열이 반전된 문자열이 포함되었는지를 확인해야 하는 문제이다.

즉, 입력된 문자열 중 abc가 있고, cba도 있다면 이 문자열의 길이인 3과 가운데 글자인 b를 출력하면 된다.

 

특정 문자열이 존재하는지 아닌지를 확인하기 위해 set을 사용했다.

먼저 문자열들을 입력받아서 set에 계속 저장한다.

문자열을 입력받아서 반전 시킨 후, 그 문자열이 set에 있는지 확인해봤을 때,

존재한다면 그 문자열이 우리가 찾는 답이 된다.

코드

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

int main()
{
    set<string> sset;
    int n;
    cin>>n;
    string res;
    int reslen=0;
    for(int i=0; i<n; i++)
    {
        bool flag = true;
        string s;
        cin>>s;
        int len = s.length();
        for(int j=0; j<len/2; j++)
        {
            if(s[j]!=s[len-j-1]) 
            {
                flag = false;
                break;
            }
        }
        if(flag)
        {
            res=s;
            reslen = len;
        }
        else
        {
            reverse(s.begin(),s.end());
            if(sset.find(s)!=sset.end())
            {
                res=s;
                reslen = len;
            }
            else
            {
                reverse(s.begin(),s.end());
                sset.insert(s);
            }
        }
    }
    cout<<reslen<<' '<<res[reslen/2];
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

백준 4470 - 줄번호  (0) 2022.11.17
백준 17608 - 막대기(C++)  (0) 2022.11.08
백준 10826 - 피보나치 수 4(C++)  (0) 2022.10.13
백준 9251 - LCS (C++)  (0) 2022.09.13
백준 14490 - 백대열(C++)  (0) 2022.09.04