이 영역을 누르면 첫 페이지로 이동
Arc 블로그의 첫 페이지로 이동

Arc

페이지 맨 위로 올라가기

Arc

[Baekjoon] 9935: 문자열 폭발

  • 2023.03.02 10:18
  • Algorithm/PS
글 작성자: SeoArc

문제

대상 문자열과 삭제할 문자열이 주어지면, 대상 문자열에서 삭제할 문자열이 더 이상 없을 때까지 계속 삭제해나가는 문제이다.

 

풀이

내 풀이

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

public class Main9935 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine(); // 대상 문자열
        String deleteStr = br.readLine(); // 삭제할 문자열

        int strLength = str.length();
        int deleteStrLength = deleteStr.length();

        // 초기에 삭제할 문자열 길이만큼 대상 문자열을 StringBuilder에 삽입
        StringBuilder sb = new StringBuilder(str.substring(0, deleteStrLength));
        for (int i = deleteStrLength; i <= strLength; i++) {
            // StringBuilder에 있는 문자가 삭제할 문자열 길이보다 길고, 끝부분이 삭제할 문자열과 같다면 삭제 -> 즉 스택 pop연산과 동일
            while (sb.length() >= deleteStrLength &&
                    sb.substring(sb.length() - deleteStrLength).equals(deleteStr)) {
                sb.delete(sb.length() - deleteStrLength, sb.length());
            }

            if (i == strLength) {
                break;
            }

            // 끝에 문자를 하나씩 삽입
            sb.append(str.charAt(i));
        }

        if (sb.length() == 0) {
            System.out.println("FRULA");
            return;
        }
        System.out.println(sb);
    }
}

StringBuilder를 스택처럼 사용하여 구현하였다.

먼저 하나 씩 대상 문자열에서 문자를 추출하여 StringBuilder에 넣은 후, 끝 부분이 삭제할 문자열과 같은지 비교하며 삭제해 나갔다.

예를 들어, 대상 문자열이 nizCC44, 삭제할 문자열이 C4라고 한다면

n, ni, niz, nizC, nizCC 이렇게 계속 쌓이다가, nizCC4가 되면 끝 부분이 C4로 일치하기 때문에 삭제되어 nizC가 된다.

여기서 다시 마지막 인덱스 문자인 4가 삽입되어 nizC4가 되면 또 삭제되어 niz가 된다.

최종적으로 답은 niz가 된다.

 

회고

StringBuilder를 스택처럼 사용했지만 효율이 그렇게 좋지 않은 것 같다.

끝 부분에서 계속 subString하는 연산이 가볍지 않은 것 같다.

 

다른 방법을 이용하면 더 효율적으로 풀 수 있을 것 같다. 한 번 다시 풀어봐야겠다.

'Algorithm > PS' 카테고리의 다른 글

[Baekjoon] 1655: 가운데를 말해요  (0) 2023.03.02
[Baekjoon] 2170: 선 긋기  (0) 2023.03.02
[Baekjoon] 16934: 게임 닉네임  (0) 2023.03.02
[Baekjoon] 1138: 한 줄로 서기  (0) 2023.02.26
[Baekjoon] 17298: 오큰수  (0) 2022.12.06

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Baekjoon] 1655: 가운데를 말해요

    [Baekjoon] 1655: 가운데를 말해요

    2023.03.02
  • [Baekjoon] 2170: 선 긋기

    [Baekjoon] 2170: 선 긋기

    2023.03.02
  • [Baekjoon] 16934: 게임 닉네임

    [Baekjoon] 16934: 게임 닉네임

    2023.03.02
  • [Baekjoon] 1138: 한 줄로 서기

    [Baekjoon] 1138: 한 줄로 서기

    2023.02.26
다른 글 더 둘러보기

정보

Arc 블로그의 첫 페이지로 이동

Arc

  • Arc의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (106)
    • Language (28)
      • C++ (0)
      • C# (0)
      • Java (28)
    • Algorithm (47)
      • Algorithm (15)
      • Data Structure (6)
      • PS (26)
    • Computer Science (22)
      • Design Pattern (1)
      • Network (14)
      • OS (7)
    • Game (0)
      • Unity (0)
    • Backend (3)
      • Spring (1)
      • JPA (2)
    • DB (0)
      • SQL (0)
    • DevOps (2)
      • AWS (0)
      • Docker (2)
      • Jenkins (0)
      • Nginx (0)
    • Software Engineering (4)
      • OOP (4)
    • AI (0)
      • Machine Learning (0)
    • Others (0)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 자바
  • graph
  • java
  • algorithm
  • 네트워크
  • 그래프
  • network
  • 알고리즘

나의 외부 링크

정보

SeoArc의 Arc

Arc

SeoArc

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © SeoArc. Designed by Fraccino.

티스토리툴바