PS

BOJ 16120 - PPAP

728x90

www.acmicpc.net/problem/16120

 

16120번: PPAP

첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.

www.acmicpc.net

 

이 문제에서는 P 의 갯수를 세면서, 몇가지 조건을 통과하도록 작성하면 된다

먼저 입력받은 문자열을 쭉 돌면서, 현재 인덱스의 값이 P 이면 갯수를 하나씩 늘린다

그리고 앞의 문자가 P 가 두번 나왔으면서 동시에 다음 문자가 P 인 경우 PPAP 에 해당하므로 이 PPAP 를 P 로 치환한다. (앞에 이미 2개를 셌으므로 갯수 하나 감소)

그리고 다 탐색이 끝난 다음 마지막 P 의 갯수가 한개 남았으면, PPAP 에서 마지막 P 라는 의미이므로, PPAP 를 출력한다

그게 아닌 모든 다른 경우들은 PPAP 에 속하지 않으므로 NP 로 처리한다.

 

 

- C++

#include <bits/stdc++.h>
 
using namespace std;
 
string str;
 
int main() {
    cin.tie(0); ios_base::sync_with_stdio(0);
    
    cin >> str;
    
    int p_cnt = 0;
    for (int i = 0; i < str.length(); ++i) {
        if (str[i] == 'P') {
            p_cnt++;
            continue;
        }
        
        if (p_cnt >= 2 && str[i + 1== 'P') { // 현재 'A' 
            p_cnt--// PPAP 를 P 로 치환했으므로 하나 감소 
            i++;
        } else {
            cout << "NP";
            return 0;
        }
    }
    
    if (p_cnt == 1cout << "PPAP"// 마지막에 P 가 하나 있을때 PPAP  
    else cout << "NP";
    
    return 0;
}
cs

 

 

 

728x90

'PS' 카테고리의 다른 글

BOJ 1082 - 방번호  (1) 2021.03.02
BOJ 1022 - 소용돌이 출력  (0) 2021.02.22
BOJ 2515 - 전시장  (0) 2021.02.21
BOJ 3197 - 백조의 호수  (0) 2021.02.21
BOJ 1450 - 냅색문제  (0) 2021.02.20