본문 바로가기

Algorithm/Baekjoon BOJ

[백준][C++] 9935: 문자열 폭탄

반응형

 

https://www.acmicpc.net/problem/9935

 

9935번: 문자열 폭발

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다. 둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다. 두 문자열은 모

www.acmicpc.net

 

 

 

 

 


- 문제

 

  문자열이 S가 있고 폭탄문자열 bomb가 있을 때 S 안에 bomb를 모두 없애는 문제다.

 

 


- 해설

string 클래스를 stack처럼 사용하면 문제를 해결할 수 있다.

 

S 문자열을 하나씩 확인하다가 폭탄 문자열의 가장 마지막 문자랑 일치하는 문자가 나오면, 폭탄문자열의 길이만큼 돌아가면서 두 문자열을 비교하고, 만약 같으면 pop_back으로 날려버린다.

 

이후에 계속 이어가면서 나올떄마다 날려버리면서 진행하면 된다. 

 

 

 


- 풀이

#include <iostream>
#include <string>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    string s, bomb, answer = "";
    int bombSize, idx = 0, cnt;
    
    cin >> s;
    cin >> bomb;
    
    bombSize = bomb.size();
    for(int i = 0; i < s.size(); i++){
        answer += s[i];
        
        if(answer[answer.size() - 1] == bomb[bombSize - 1]){
            if(answer.size() >= bombSize){
                cnt = 0;
                for(int j = 0; j < bombSize; j++){
                    if(answer[answer.size() - 1 - j] == bomb[bombSize - 1 - j]){
                        cnt++;
                    }
                }
                if(cnt == bombSize){
                    for(int j = 0; j < bombSize; j++){
                        answer.pop_back();
                    }
                }
            }
        }
    }
    if(answer.size() == 0){
        cout << "FRULA";
    }
    else{
        cout << answer;
    }
    
    
    
    return 0;
}

 

 


- 새롭게 알게 된 점

 

반응형

'Algorithm > Baekjoon BOJ' 카테고리의 다른 글

[백준][C++] 17299: 오등큰수  (0) 2022.12.30
[백준][C++] 17298: 오큰수  (0) 2022.12.30
[백준][C++] 2629: 양팔저울  (0) 2022.12.30
[백준][C++] 1520: 내리막 길  (0) 2022.12.30
[백준][C++] 1063: 킹  (1) 2022.12.27