https://www.acmicpc.net/problem/16120
16120번: PPAP
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
www.acmicpc.net
스택을 사용하여 풀 수 있는 문제입니다.
문자열의 P를 PPAP로 바꿀 수 있다는 말은, 달리 말하면 PPAP을 P로 바꾸어 원래 문자열을 복원할 수 있다는 뜻입니다. 문자열을 쭉 확인하며 스택에 문자들을 넣어준 뒤, 맨 마지막 네 문자가 PPAP라면 P로 바꾸는 과정을 반복하여 마지막에 스택에 P만 남아있다면 PPAP를, 아니라면 NP를 출력하면 됩니다.
아래는 코드입니다.
#include <bits/stdc++.h>
#define FastIO ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl '\n'
#define ends ' '
using namespace std;
int T, n;
int32_t main(void) {
  FastIO;
  T = 1;
  //cin >> T;
  while (T--) {
    string str;
    cin >> str;
    n = str.length();
    stack<char> s;
    for (int i = 0; i < n; i++) {
      s.push(str[i]);
      if (s.size() >= 4) {
        char d = s.top();
        s.pop();
        char c = s.top();
        s.pop();
        char b = s.top();
        s.pop();
        char a = s.top();
        s.pop();
        if (a == 'P' && b == 'P' && c == 'A' && d == 'P') s.push('P');
        else {
          s.push(a);
          s.push(b);
          s.push(c);
          s.push(d);
        }
      }
    }
    int flag = 1;
    if (s.size() > 1 || s.top() != 'P') flag = 0;
    if (flag) cout << "PPAP" << endl;
    else cout << "NP" << endl;
  }
  return 0;
}'알고리즘 문제해결 > BOJ' 카테고리의 다른 글
| BOJ 16929 Two Dots (0) | 2022.10.26 | 
|---|---|
| BOJ 4913 페르마의 크리스마스 정리 (0) | 2022.09.19 | 
| BOJ 2138 전구와 스위치 (0) | 2022.09.06 | 
| BOJ 4181 Convex Hull (0) | 2022.09.04 | 
| BOJ 9694 무엇을 아느냐가 아니라 누구를 아느냐가 문제다 (0) | 2022.09.03 |