Algorithm/PS
[1일 1알고] S4 27466 그래서 대회 이름 뭐로 하죠
Basaeng
2026. 3. 25. 13:40

개요
https://www.acmicpc.net/problem/27466
간단한 문자열 가공 문제입니다.
마지막 문자는 모음이 아니며 마지막에서 두 번째 ,세 번째 글자는 A인 문자열을 만들어야합니다.
조건에 맞게 가공 후 조건에 맞는다면 YES와 가공 문자열을, 아니라면 NO를 출력합니다.
의식의 흐름대로 코드를 만들어 인덱스가 헷갈리게 되었는데 직접 하시면 더 깔끔하게 코드를 만들 수 있을 것으로 보입니다.
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N, M;
cin >> N >> M;
string S;
cin >> S;
int len = N;
int temp = N-1;
reverse(S.begin(), S.end());
ostringstream oss;
for (int i = 0; i < N; ++i)
{
--len;
if (S[i] != 'A' && S[i] != 'E' && S[i] != 'I' && S[i] != 'O' && S[i] != 'U')
{
temp = i+1;
oss << S[i];
break;
}
}
int astack = 0;
for (int i = temp; i < N; ++i)
{
--len;
if (S[i] == 'A')
{
++astack;
oss << S[i];
if (astack == 2)
{
temp = i+1;
break;
}
}
}
bool flag = false;
if (astack == 2 && len >= M - 3)
{
flag = true;
for (int i = 0; i < M - 3; ++i)
{
oss << S[temp + i];
}
}
string result = oss.str();
reverse(result.begin(), result.end());
if (flag)
{
cout << "YES\n" << result;
}
else
{
cout << "NO";
}
return 0;
}