문제링크
9935번: 문자열 폭발
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모
www.acmicpc.net
문제 난이도(solved.ac 기준)
Gold4
문제설명
1. 입력받은 문자열을 Char으로 하나씩 읽어서 새로운 공간에 쌓는다
2. 폭탄 문자열의 마지막 문자와 새로운 공간에 들어가는 문자가 같은 경우
3. 현재 새로운 공간에 쌓인 문자열의 길이가 폭탄 문자열 길이보다 작은 경우 폭탄은 존재하지 않는다
4. (3의 경우가 아니라면) 쌓여있는 문자열을 거꾸로 검사하며 폭탄과 같은지 비교한다
5. (4의 결과) 폭탄과 일치한다면 해당 부분을 삭제한다
6. 모든 검사가 끝나고 남은 문자열이 있으면 출력하고 없으면 FARULA를 출력한다
※ vector를 이용해서 문제풀이를 마치고보니 stack을 선언해서 풀이했어도 편했을거 같다는 생각을 했다 ※
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string str, bomb;
cin >> str >> bomb;
vector<char> vc;
for (char ch : str) {
vc.push_back(ch); //문자 넣기
//넣은 문자가 폭탄의 마지막 문자와 같은 경우
if (ch == bomb[bomb.size() - 1]) {
//현재 쌓인 문자열 길이가 폭탄보다 작다면 폭탄이 존재하지 않는 경우이다
if (vc.size() - bomb.size() < 0) {
continue;
}
bool flag = true;
int endIdx = vc.size() - 1;
for (int i = 0; i < bomb.size(); i++) {
//쌓여있는 문자와 폭탄 문자가 일치하지 않는 경우
if (vc[endIdx - i] != bomb[bomb.size() - 1 - i]) {
flag = false;
break;
}
}
//폭탄이 존재하는 경우 해당 부분 삭제
if (flag) {
vc.erase(vc.begin() + endIdx +1 - bomb.size(), vc.end());
}
}
}
if (vc.size() > 0) {
for (int i = 0; i < vc.size(); i++) {
cout << vc[i];
}
cout << '\n';
}
else {
cout << "FRULA\n";
}
return 0;
}
|
cs |
'알고리즘 문제풀이' 카테고리의 다른 글
[LeetCode] 70.Climbing Stairs (0) | 2022.04.06 |
---|---|
[프로그래머스 17680] 캐시 (0) | 2022.01.10 |
[백준 1647]도시 분할 계획 (0) | 2020.11.08 |
[프로그래머스 42884]단속카메라 (0) | 2020.11.06 |
[프로그래머스 42861]섬 연결하기 (0) | 2020.11.05 |