-
[16120] PPAPBOJ 2022. 2. 24. 19:12
https://www.acmicpc.net/problem/16120
16120번: PPAP
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
www.acmicpc.net
문자열을 하나씩 확인하면서, P라면 스택에 넣는다.
A라면, A의 다음것이 P이면서 스택의 size()가 2개 이상이면, PPAP를 만들 수 있으므로 PPAP를 만든다.
만약 불가능하면 NP를 출력하고, 루프가 끝난 뒤 스택의 size()가 1이하일때 PPAP로 판별할 수 있다.
결국 스택에 넣게 되는 문자는 P밖에 없으므로, 스택이 아니라 스택의 size()만을 의미하는 변수 하나로 관리해도 된다.
올바른 괄호 문자열을 판별할때와 비슷한 방식이 되겠다.
#include <bits/stdc++.h>using namespace std;#ifdef ONLINE_JUDGEconstexpr bool local = false;#elseconstexpr bool local = true;#endifusing ll = long long;using pi = pair<ll, ll>;string s;int cnt;int main(void) {if (!local) ios_base::sync_with_stdio(0), cin.tie(0);cin >> s;int i, S = s.length();for (i = 0; i < S;) {if (s[i] == 'P') {i++;cnt++;continue;}if (cnt < 2) {cout << "NP";return 0;}if (i + 1 >= S || s[i + 1] == 'A') {cout << "NP";return 0;}cnt -= 2;i++;}cout << ((cnt <= 1) ? "PPAP" : "NP");return 0;}
'BOJ' 카테고리의 다른 글
[13904] 과제 (0) 2022.02.25 [1455] 뒤집기 II (0) 2022.02.24 [3991] 한번 쏘면 멈출 수 없어 (0) 2022.02.23 [21554] 마법의 돌 장난감 (0) 2022.02.22 [2445] 별 찍기 - 8 (0) 2022.02.22