오리 - 12933
2025. 2. 12. 15:19ㆍPS/백준
문제
https://www.acmicpc.net/problem/12933
느낀점
상당히 재밌다고 생각했다. 들어오는 문자와 바로 앞에 있는 문자를 비교해서 원래 문자에 넣을 지 새로운 문자를 생성할 지 판단해주고 아닌 경우에 실패했다고 출력하면 되었다.
풀이
#include <iostream>
#include <string>
#include <vector>
int judge(std::vector<std::string> &cnt, char c)
{
for (size_t i = 0; i < cnt.size(); i++)
{
char back = cnt[i].back();
// std::cout << "back: " << back << " c: " << c << "\n";
// std::cout << i << " : " << cnt[i] << "\n";
if (c == 'q' && back == 'k' || c == 'u' && back == 'q' || c == 'a' && back == 'u' || c == 'c' && back == 'a' || c == 'k' && back == 'c')
{
cnt[i] += c;
// std::cout << "cnt: " << cnt[i] << "\n";
c = '-';
}
}
if (c == 'q')
{
// std::cout << "empty next q: " << c << "\n";
std::string temp = "";
temp += c;
cnt.push_back(temp);
// std::cout << "cnt size: " << cnt.size() << "\n";
c = '-';
}
if (c != '-')
{
return -1;
}
return 0;
}
int main()
{
std::string reference;
std::cin >> reference;
std::vector<std::string> cnt;
std::string s = "";
for (size_t i = 0; i < reference.size(); i++)
{
// std::cout << "==============" << "\n";
if (cnt.empty())
{
if (reference[i] != 'q')
{
std::cout << -1;
return 0;
}
// std::cout << "first s: " << reference[i] << "\n";
s += reference[i];
cnt.push_back(s);
}
else
{
// std::cout << "next s: " << reference[i] << "\n";
if (judge(cnt, reference[i]) < 0)
{
std::cout << -1;
return 0;
}
}
}
int answer = 0;
for (size_t i = 0; i < cnt.size(); i++)
{
if (cnt[i].back() != 'k')
{
std::cout << -1;
return 0;
}
answer++;
}
std::cout << answer;
return 0;
}
'PS > 백준' 카테고리의 다른 글
팰린드롬 만들기 - 1254 (0) | 2025.02.12 |
---|---|
비슷한 단어 - 2607 (0) | 2025.02.12 |
앵무새 - 14713 (0) | 2025.02.12 |
222-풀링 - 17829 (0) | 2025.02.12 |
마인크래프트 - 18111 (0) | 2025.02.12 |