[C++] 백준(BOJ) -14405 : 피카츄
인프런에 있는 큰돌님의 강의 10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트를 듣고 정리한 필기입니다.
문제
피카츄는 “pi”, “ka”, “chu”를 발음할 수 있다. 따라서, 피카츄는 이 세 음절을 합친 단어만 발음할 수 있다. 예를 들면, “pikapi”와 “pikachu”가 있다.
문자열 S가 주어졌을 때, 피카츄가 발음할 수 있는 문자열인지 아닌지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문자열 S가 주어진다. 문자열은 알파벳 소문자로 이루어진 문자열이며, 길이는 5000을 넘지 않는다.
출력
문자열 S가 “pi”, “ka”, “chu”를 이어 붙여서 만들 수 있으면 “YES”를 아니면 “NO”를 출력한다.
알고리즘
- 문자열
풀이
- 플래그 불 변수를 하나 선언하고, 입력 받은 문자열의 앞에서부터 조건에 맞는 지 substr 함수를 이용해 검사해 나간다.
- 문제에서 제시한 조건에 만족한다면 조건의 길이만큼 인덱스를 더해준다.
- 문제에서 제시한 조건에 만족하지 않는다면 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 오류 방지