피너클의 it공부방
백준 9935 문자열 폭발 (c++) : 피너클 본문
728x90
반응형
https://www.acmicpc.net/problem/9935
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
문자열 문제다.
문자열에 폭발 문자열이 있으면 터트려 없에야한다. 이번에는 stack이 아닌 vector를 쓸것이다.
vector<char> v;
string a, b;
a가 문자열, b가 폭발 문자열이다.
v에는 a의 문자를 하나씩 넣을것이다.
cin >> a >> b;
for (int i = 0; i < a.length(); i++) {
v.push_back(a[i]);
값들을 입력받은뒤 a의 길이만큼 반복문을 돌린다. 먼저 v에 a[i]를 넣어준다.
if (v.size() >= b.length() && v[v.size() - 1] == b[b.length() - 1]) {
만약 v의 사이즈가 b의 길이보다 크고 v의 마지막 문자가 b의 마지막 문자와 같다면
bool chk = true;
for (int j = 0; j < b.length(); j++) {
if (v[v.size() - b.length() + j] != b[j]) {
chk = false;
break;
}
}
간단하게 b의 길이만큼 v를 돌아보며 확인한다. 만약 v와 b가 같이 않은 값이 있으면 chk를 false로 바꾸고 나온다.
if (chk) {
for (int i = 0; i < b.length(); i++) v.pop_back();
}
}
}
만약 chk가 true라면 b의 길이만큼 v의 값을 뺀다.
if (v.size() == 0) {
cout << "FRULA" << endl;
}
else {
for (int i = 0; i < v.size(); i++) cout << v[i];
}
모든 반복문이 끝나고 v의 사이즈가 0이라면 FRULA를 출력하고 아니면 v를 출력한다.
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<char> v;
string a, b;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> a >> b;
for (int i = 0; i < a.length(); i++) {
v.push_back(a[i]);
if (v.size() >= b.length() && v[v.size() - 1] == b[b.length() - 1]) {
bool chk = true;
for (int j = 0; j < b.length(); j++) {
if (v[v.size() - b.length() + j] != b[j]) {
chk = false;
break;
}
}
if (chk) {
for (int i = 0; i < b.length(); i++) v.pop_back();
}
}
}
if (v.size() == 0) {
cout << "FRULA" << endl;
}
else {
for (int i = 0; i < v.size(); i++) cout << v[i];
}
}
전체코드다.
728x90
반응형
'백준' 카테고리의 다른 글
백준 15666 N과 M (12) (c++) : 피너클 (0) | 2022.08.01 |
---|---|
백준 16953 A → B (c++) : 피너클 (0) | 2022.08.01 |
백준 10830 행렬 제곱 (c++) : 피너클 (0) | 2022.07.31 |
백준 2638 치즈 (c++) : 피너클 (0) | 2022.07.31 |
백준 25238 가희와 방어율 무시 (c++) : 피너클 (0) | 2022.07.31 |
Comments