알고리즘/문제 풀이
백준 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];
}