[BOJ][C#] 9935 문자열 폭발

LimJaeJun·2023년 12월 23일
0

PS/BOJ

목록 보기
71/108

📕 문제

📌 링크

📗 접근 방식

문자열 a와 b 입력받기:

  • a와 b 두 문자열을 입력 받습니다.

StringBuilder t 초기화:

  • 문자열 a에서 b에 해당하는 부분을 제거하기 위한 새로운 문자열을 만들기 위해 StringBuilder t를 초기화합니다.

문자열 a 순회:

  • 문자열 a를 앞에서부터 순회하면서 각 문자를 t에 추가합니다.

부분 문자열 비교 및 제거:

  • t의 길이가 b의 길이 이상이 될 때마다, t의 마지막 부분이 b와 일치하는지 확인합니다.
    만약 일치한다면, t의 마지막 부분을 b의 길이만큼 제거합니다.

결과 출력:

  • 모든 처리가 끝난 후에는 t를 출력합니다.
    만약 t가 비어있다면("FRULA"), "FRULA"를 출력합니다.

📘 코드

using System.Text;

namespace BOJ_9935
{
    class Program
    {

        static void Main()
        {
            string a = Console.ReadLine();
            string b = Console.ReadLine();
            StringBuilder t = new StringBuilder();

            for (int i = 0; i < a.Length; i++)
            {
                t.Append(a[i]);
                if (t.Length >= b.Length)
                {
                    bool flag = true;
                    for (int j = 0; j < b.Length; j++)
                    {
                        if (t[t.Length - b.Length + j] != b[j])
                        {
                            flag = false;
                            break;
                        }
                    }

                    if (flag)
                    {
                        t.Length -= b.Length;
                    }
                }
            }

            if (t.Length == 0)
            {
                Console.WriteLine("FRULA");
            }
            else
            {
                Console.WriteLine(t);
            }
        }
    }
}

📙 오답노트

StringBuilder를 사용하지 않고 string으로 문자열을 계속 추가 제거 하였더니 메모리 초과가 나왔다.
문자열 문제에서 문자열을 합치거나 짤라야하는 경우에 StringBuilder를 이용할 수 있도록 연습해야겠다.
StringBuilder가 String 연산시 왜 효율적인지 다음에 블로그 글을 작성해봐야겠다.

📒 알고리즘 분류

  • 자료 구조
  • 문자열
  • 스택
profile
Dreams Come True

0개의 댓글

관련 채용 정보