상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.
폭발은 다음과 같은 과정으로 진행된다.
- 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.
- 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.
- 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.
상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.
폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.
입력
첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.
둘째 줄에 폭발 문자열이 주어진다. 길이는 1보다 크거나 같고, 36보다 작거나 같다.
두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.
출력
첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.
예제 입력 1
mirkovC4nizCC44
C4
예제 출력 1
mirkovniz
예제 입력 2
12ab112ab2ab
12ab
예제 출력 2
FRULA
나의 풀이
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'example.txt';
const input = fs.readFileSync(filePath).toString().trim().split('\n');
const str = input[0];
const bomb = input[1];
let answer = [];
for (let i = 0; i < str.length; i++) {
answer.push(str[i]);
if (answer.slice(-bomb.length).join('') === bomb) {
answer.splice(-bomb.length);
}
}
console.log(answer.length ? answer.join('') : "FRULA");
for 문을 사용하여 문자열 str을 하나씩 탐색하면서 answer 배열에 현재 문자를 추가한다.
answer의 끝 부분이 bomb 문자열과 일치하는지 확인
slice(-bomb.length).join('')를 통해 answer의 마지막 부분을 추출하고, bomb과 비교
만약 일치한다면, answer에서 bomb.length만큼 문자를 제거
최종적으로 answer에 남아있는 문자열을 출력. 만약 answer가 비어있으면 "FRULA"를 출력
처음에는 스택으로 접근해야겠다고 생각해 스택을 활용해 풀어보고 있었는데 중간에 문자열 메서드를 사용하면 더 쉽게 풀 수 있을 것 같아서 코드를 변경하고 제출하였더니 잘 통과되었다. .!! ㅎㅎ
'코테 준비 > 백준' 카테고리의 다른 글
[백준] 벽 부수고 이동하기 (js) ( 2% 시간초과 해결 ) (2) | 2024.11.29 |
---|---|
[백준] 숨바꼭질 2 (js) (2) | 2024.11.12 |
[백준] 토마토 (javascript , node.js) 시간초과 해결 (1) | 2023.12.09 |
[백준] 1012 유기농 배추 (javascript) (2) | 2023.12.07 |