728x90
이 문제에서는 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 == 1) cout << "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 |