최대 1 분 소요

PPAP (백준 Gold 4)

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

주어지는 문자열이 PPAP 문자열인지를 찾는 문제

  • PPAP 문자열
    PPAP를 P로 바꾸는 과정을 반복하였을때
    주어진 문자열이 PPAP이 된다면 PPAP 문자열이다

풀이 방법

주어진 문자열을
비교형 문자열에 ‘하나씩’ 쌓아가며
가장 최근 4개의 문자열이 PPAP인지를 확인한다

  • 아니라면 다음 문자로 넘어감

  • 맞다면 해당 부분을 P 하나로 교체해준다

  • 최종적으로 PPAP 자체도 P로 바뀌므로
    마지막에 남은 문자열이 P인지 확인다

제출 코드

#include<iostream>
#include<string>
#include<algorithm>

using namespace std;

const string ppap = "PPAP";

int main()
{
	string str;
	cin >> str;

	string comp = "";
	
	for (char c : str)
	{
		comp.push_back(c);

		if (comp.size() < 4)
		{
			continue;
		}
		
		int idx = 0;

		bool isRight = true;

		for (int i = 3; i >= 0; i--)
		{
			if (comp[comp.size() - 1 - idx] != ppap[i])
			{
				isRight = false;
				break;
			}

			idx++;
		}

		if (isRight)
		{
			for (int i = 0; i < 4; i++)
				comp.pop_back();

			comp.push_back('P');
		}
	}

	if (comp == "P")
		cout << ppap;
	else
		cout << "NP";

	return 0;
}

결과

Image

temp string을 선언하여 비교할까 싶다가
(temp(comp.end() - 4, comp.end()))
(temp == ppap?)

해당 방식을 쓰느니 그냥 comp의 뒤쪽 4개를 비교하는 편이
더 괜찮아보여 그냥 비교하는 쪽을 선택하였다

댓글남기기