본문 바로가기
알고리즘/백준

[백준 14405] 피카츄 (C++)

by fortissimo 2025. 1. 19.

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

문제


피카츄는 "pi", "ka", "chu"를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, "pikapi"와 "pikachu"가 있다.

문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문자열인지 아닌지 구하는 프로그램을 작성하시오.

 

입력


첫째 줄에 문자열 S가 주어진다. 문자열은 알파벳 소문자로 이루어진 문자열이며, 길이는 5000을 넘지 않는다.

 

출력


문자열 S가 "pi", "ka", "chu"를 이어 붙여서 만들 수 있으면 "YES"를 아니면 "NO"를 출력한다.

 

문제 풀이


문자열 문제.

 

피카츄가 발음할 수 있는 음절은 pi, ka, chu이다. 따라서 문자열의 앞에서부터 2자 혹은 3자를 잘랐을 때 이 세 문자열이어야 하고, 아니라면 피카츄가 말할 수 있는 문자열이 아니다. substr()로 앞에서 2자 혹은 2자로 자른 후 pi, ka, chu와 같은지 확인하고 나머지 남은 문자열만을 재 저장한다. 이를 반복했을 때 공백이 나오면 피카츄가 발음 가능하고, 세 음절 이외의 다른 문자열이 존재한다면 발음할 수 없다.

 

아래는 코드.

더보기
#include <iostream>
#include <string>
using namespace std;

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

	string str;
	cin >> str;
	while (str != "")
	{
		if (str.substr(0, 2) == "pi")
		{
			str = str.substr(2);
		}
		else if (str.substr(0, 2) == "ka")
		{
			str = str.substr(2);
		}
		else if (str.substr(0, 3) == "chu")
		{
			str = str.substr(3);
		}
		else
		{
			break;
		}
	}
	if (str == "")
	{
		cout << "YES" << "\n";
	}
	else
	{
		cout << "NO" << "\n";
	}
	return 0;
}