기몽수
코딩 기록일지
기몽수
전체 방문자
오늘
어제
  • 분류 전체보기 (443)
    • 알고리즘 - SWEA (210)
      • D1 (19)
      • D2 (25)
      • D3 (143)
      • D4 (21)
      • D5 (2)
    • 알고리즘 - Programmers (74)
      • Unrated (34)
      • Lv 0 (4)
      • Lv 1 (3)
      • Lv 2 (32)
      • Lv 3 (1)
    • 알고리즘 - Baekjoon (158)
      • Bronze (1)
      • Silver (65)
      • Gold (90)
      • Platinum (2)
    • 취업 (0)
    • SSAFY (1)
hELLO · Designed By 김용수.
기몽수

코딩 기록일지

알고리즘 - Baekjoon/Gold

[백준] 9935번 : 문자열 폭발 Gold4(골드4) - JAVA[자바]

2023. 12. 13. 15:39

[Gold IV] 문자열 폭발 - 9935

문제 링크

성능 요약

메모리: 39504 KB, 시간: 372 ms

분류

자료 구조, 스택, 문자열

제출 일자

2023년 12월 13일 15:34:52

문제 설명

상근이는 문자열에 폭발 문자열을 심어 놓았다. 폭발 문자열이 폭발하면 그 문자는 문자열에서 사라지며, 남은 문자열은 합쳐지게 된다.

폭발은 다음과 같은 과정으로 진행된다.

  • 문자열이 폭발 문자열을 포함하고 있는 경우에, 모든 폭발 문자열이 폭발하게 된다. 남은 문자열을 순서대로 이어 붙여 새로운 문자열을 만든다.
  • 새로 생긴 문자열에 폭발 문자열이 포함되어 있을 수도 있다.
  • 폭발은 폭발 문자열이 문자열에 없을 때까지 계속된다.

상근이는 모든 폭발이 끝난 후에 어떤 문자열이 남는지 구해보려고 한다. 남아있는 문자가 없는 경우가 있다. 이때는 "FRULA"를 출력한다.

폭발 문자열은 같은 문자를 두 개 이상 포함하지 않는다.

입력

첫째 줄에 문자열이 주어진다. 문자열의 길이는 1보다 크거나 같고, 1,000,000보다 작거나 같다.

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

두 문자열은 모두 알파벳 소문자와 대문자, 숫자 0, 1, ..., 9로만 이루어져 있다.

출력

첫째 줄에 모든 폭발이 끝난 후 남은 문자열을 출력한다.

 

 

잘못된 풀이

1. 주어진 문자에서 폭탄 문자들이 사라질 때까지 전부 replaceAll해줬다.

2.이런 방식으로 문제를 푼다면 메모리초과가 발생함.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder word = new StringBuilder(br.readLine());
        String exp = br.readLine();
        // 주어진 문자열에서 폭탄 문자가 없어질 때 까지 계속 제거해줌
        while (word.toString().contains(exp)) {
            int idx = word.indexOf(exp);
            word.delete(idx, idx + exp.length());
        }
        System.out.println(word.toString().isEmpty() ? "FRULA" : word);

    }
}

 

올바른 풀이

1. 문자를 넣어주면서 폭탄 문제열이 들어올 수 있다면(길이가 크거나 같을 때) 바로 제거해준다.

2. 문자를 제거 해준 뒤 StringBuilder에 넣어준다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String word = br.readLine();
        String bomb = br.readLine();
        // bomb.length()는 많이 쓰이기 때문에 bombLen 변수로 만들어준다.
        int bombLen = bomb.length();

        // 값을 넣어줄 stack
        Stack<Character> stack = new Stack<>();
        for (char ch : word.toCharArray()) {
            // 들어온 ch를 push
            stack.push(ch);
            // ch사이즈가 bombWord보다 같거나 크면 bombCheck메서드 실행
            if (stack.size() >= bombLen && bombCheck(stack, bomb,bombLen)) {
                // 만약 bomb단어가 있다면 bomb길이만큼 폭탄을 제거해줌
                for(int i = 0; i < bombLen; i++){
                    stack.pop();
                }
            }
        }

        // iterator방식으로 사용하기 때문에 reverse할 필요없이 바로 삽입해주면 됨
        StringBuilder sb = new StringBuilder();
        for (char ch : stack) {
            sb.append(ch);
        }
        System.out.println(sb.length() == 0 ? "FRULA" : sb);
    }

    // stack에 마지막으로 들어온 문자들이 bomb크기만큼 확인 후 같다면 true 다르다면 false
    private static boolean bombCheck(Stack<Character> stack, String bomb, int bombLen) {
        for(int i = 0; i < bombLen; i++){
            if (stack.get(stack.size() - bombLen + i) != bomb.charAt(i)) {
                return false;
            }
        }
        return true;
    }
}

'알고리즘 - Baekjoon > Gold' 카테고리의 다른 글

[백준] 2661번 : 좋은수열 Gold4(골드4) - JAVA[자바]  (0) 2023.12.17
[백준] 15686번 : 치킨 배달 Gold5(골드5) - JAVA[자바]  (0) 2023.12.16
[백준] 124-번 : 노드사이의 거리 Gold5(골드5) - JAVA[자바]  (1) 2023.12.12
[백준] 2668번 : 숫자고르기 Gold5(골드5) - JAVA[자바]  (0) 2023.12.12
[백준] 1963번 : 소수 경로 Gold4(골드4) - JAVA[자바]  (0) 2023.11.28
    '알고리즘 - Baekjoon/Gold' 카테고리의 다른 글
    • [백준] 2661번 : 좋은수열 Gold4(골드4) - JAVA[자바]
    • [백준] 15686번 : 치킨 배달 Gold5(골드5) - JAVA[자바]
    • [백준] 124-번 : 노드사이의 거리 Gold5(골드5) - JAVA[자바]
    • [백준] 2668번 : 숫자고르기 Gold5(골드5) - JAVA[자바]
    기몽수
    기몽수

    티스토리툴바