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

인프런에 있는 큰돌님의 강의 10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트를 듣고 정리한 필기입니다.

문제

BOJ - 14405 : 피카츄(링크)

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

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

입력

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

출력

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

알고리즘

  1. 문자열

풀이

  1. 플래그 불 변수를 하나 선언하고, 입력 받은 문자열의 앞에서부터 조건에 맞는 지 substr 함수를 이용해 검사해 나간다.
  2. 문제에서 제시한 조건에 만족한다면 조건의 길이만큼 인덱스를 더해준다.
  3. 문제에서 제시한 조건에 만족하지 않는다면 flag를 체크하고 반복문을 종료한다

코드

// BOJ-14405 : 피카츄
#include<bits/stdc++.h>
using namespace std;

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

	string str;
	cin >> str;

	bool flag = 1;
	for (int i = 0; i < str.size(); )
	{
		if (i < str.size() - 1 && str.substr(i, 2) == "pi" || str.substr(i, 2) == "ka") i += 2;
		else if (i < str.size() - 2 && str.substr(i, 3) == "chu") i += 3;
		else
		{
			flag = 0;
			break;
		}
	}

	if (flag) cout << "YES\n";
	else cout << "NO\n";
	
	return 0;
}

평가

  • 문자열의 substr, stack의 top 등을 체크활 때는 size를 항상 먼저 체크해 본다

    index 오류 방지


© 2023 Jinsoo Lee. All rights reserved.

Powered by Hydejack v9.1.6