https://www.acmicpc.net/problem/16120
16120번: PPAP
첫 번째 줄에 문자열이 주어진다. 문자열은 대문자 알파벳 P와 A로만 이루어져 있으며, 문자열의 길이는 1 이상 1,000,000 이하이다.
www.acmicpc.net
[난이도] Gold4
[유형] Stack
[풀이]
새로운 string ans를 만들고 앞에서부터 하나씩 넣어보면서 PPAP가 채워지면 P로 바꾸는 식으로 문제를 해결한다.
1. 'A' 다음에 'P'가 오면 'A' 앞에는 무조건 'PP'가 있으므로 'PA'를 pop해주면 'P'만 남게되어 'PPAP'를 'P'로 바꾼게 된다.
2. 현재 'A'를 넣을 차례인데 앞에 두 문자가 'PP'가 아니면 'PPAP' 문자가 아니므로 ok flag를 0으로 설정한다.
3. 최종 ans 문자가 'PPAP'이거나 'P'이면 'PPAP' 문자이다.
https://github.com/has2/Problem-Solving/blob/master/boj-solved.ac/Gold4/16120.cpp
#include <iostream>
#include <string>
using namespace std;
string s;
int main(){
cin >> s;
bool ok = 1;
string ans;
for(int i=0;i<s.size();i++){
if(s[i]=='P'){
if(ans.empty()) ans.push_back('P');
else if(ans.back()=='A') ans.pop_back(),ans.pop_back();
else ans.push_back('P');
}else{
if(ans.size()>=2 && ans.back()=='P'&&ans[ans.size()-2]=='P') ans.push_back('A');
else {
ok=0;
break;
}
}
}
if(ans=="PPAP") ans="P";
if(!ok || ans != "P") puts("NP");
else puts("PPAP");
}
'Problem-Solving > BOJ' 카테고리의 다른 글
[BOJ/백준][Gold4] 16938 : 캠프 준비 (C++) (0) | 2021.01.17 |
---|---|
[BOJ/백준][Gold4] 16398 : 행성 연결 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 2002 : 추월 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 4803 : 트리 (C++) (0) | 2021.01.17 |
[BOJ/백준][Gold4] 14923 : 미로 탈출 (C++) (0) | 2021.01.13 |