백준 12919 A와 B 2 문제 해결 전략

2025-11-23 · Uncategorized · 읽는데 10분

백준 12919 A와 B 2 문제 해결 전략
백준의 12919번 문제는 문자열 변환 문제로, 주어진 문자열 S를 T로 변환할 수 있는지 여부를 판별하는 것이 핵심입니다. 이 문제는 단순히 S에서 T로 변환하는 것이 아니라, T에서 S로 거꾸로 접근하는 방식으로 해결할 수 있습니다.

이를 통해 변환 가능한 경로를 탐색할 수 있으며, 문제의 복잡성을 줄일 수 있습니다. 아래에서는 문제의 이해, 접근 방법, 구현 전략, 그리고 예제와 함께 상세히 설명드리겠습니다.

썸네일

문제 이해

문자열 변환

문제에서 주어진 두 문자열 S와 T는 각각 'A'와 'B'로 이루어져 있습니다. 여기서 S는 변환의 시작점, T는 최종 목표 문자열입니다.

문제의 조건은 두 가지 연산으로 문자열을 조작할 수 있다는 것입니다.

  1. 문자열의 뒤에 'A'를 추가한다.
  2. 문자열의 앞에 'B'를 추가한 후, 문자열을 뒤집는다.

이러한 연산을 통해 S에서 T로 변환할 수 있는지 확인해야 합니다. 주의해야 할 점은 S의 길이는 T의 길이보다 짧다는 것입니다.

이 조건은 문제의 해결을 복잡하게 만들기도 하지만, 반대로 해결 방법을 단순화하는 요소가 될 수 있습니다. 아래의 표는 문제의 입력 및 출력 형식을 정리한 것입니다.

입력 설명
첫 번째 줄 문자열 S (1 ≤ S의 길이 ≤ 49)
두 번째 줄 문자열 T (2 ≤ T의 길이 ≤ 50, S의 길이 < T의 길이)
출력 S를 T로 변환할 수 있으면 1, 없으면 0

접근 방법

BFS 알고리즘

문제 해결의 핵심은 문자열 변환을 거꾸로 생각하는 것입니다. 즉, T에서 시작하여 S로 변환할 수 있는 경로를 탐색하는 것입니다.

이때 두 가지 연산이 어떤 방식으로 문자열을 변환하는지 잘 이해해야 합니다. 문자열 T의 마지막 문자가 'A'인 경우, 우리는 그 문자를 제거하고 S로 변환할 수 있습니다.

반대로 마지막 문자가 'B'라면, 우리는 문자열을 뒤집고 'B'를 제거해야 합니다. 이 접근 방식은 BFS(너비 우선 탐색) 또는 DFS(깊이 우선 탐색) 알고리즘을 통해 구현할 수 있습니다.

BFS는 모든 경로를 탐색하는 데 유용하며, 각 단계에서 가능한 모든 경우를 체크할 수 있습니다. DFS는 깊이 있는 탐색을 통해 빠르게 해결책을 찾을 수 있습니다.

두 알고리즘 중 어떤 것을 사용할지는 문제의 특성과 입력 데이터에 따라 다를 수 있습니다. 아래의 표는 T에서 S로 변환하는 과정에서 발생할 수 있는 경우의 수를 정리한 것입니다.

조건 연산 결과 문자열
마지막 문자가 A A 제거 T[:-1]
마지막 문자가 B T[::-1] (뒤집기) 후 B 제거 T[1:][::-1]

이러한 과정을 통해 문자열을 탐색함으로써 S로 변환이 가능한지를 확인할 수 있습니다. 이때 각 단계에서 문자열의 길이를 체크하여 무한 루프에 빠지지 않도록 주의해야 합니다.

다른 내용도 보러가기 #1

구현 전략

DFS 탐색

이제 구체적인 구현 전략에 대해 살펴보겠습니다. 구현은 다음과 같은 단계로 나누어집니다.

  1. 입력을 받아 문자열 S와 T를 저장합니다.
  2. BFS 또는 DFS를 통해 문자열 T에서 S로 변환할 수 있는 경로를 탐색합니다.
  3. 각 단계에서 가능한 연산을 수행하고, 변환된 문자열이 S와 일치하는지를 확인합니다.
  4. 모든 경우를 탐색한 후, S로 변환할 수 있다면 1, 그렇지 않다면 0을 출력합니다.

이 과정에서 문자열의 길이를 체크하고, 이미 방문한 문자열은 다시 방문하지 않도록 관리하는 것이 필요합니다. 이를 통해 불필요한 연산을 줄이고 성능을 최적화할 수 있습니다.

아래의 표는 구현 시 고려해야 할 주요 포인트를 정리한 것입니다.

포인트 설명
문자열 길이 체크 S와 T의 길이를 비교하여 연산을 제한합니다.
방문 기록 이미 탐색한 문자열을 기록하여 중복을 방지합니다.
연산 수행 두 가지 연산을 적절히 수행하여 경로를 탐색합니다.

예제와 설명

이제 간단한 예제를 통해 문제를 더 잘 이해해 보겠습니다. 예를 들어, S = "A"이고 T = "BBAA"라고 가정해 보겠습니다.

T에서 S로 변환하기 위해서는 다음과 같은 단계를 거칠 수 있습니다.

  1. T의 마지막 문자를 확인합니다. BBAA의 마지막 문자는 A입니다. 따라서 A를 제거하고 BBA로 변환합니다.
  2. BBA의 마지막 문자를 확인합니다. 마지막 문자는 A입니다. A를 제거하고 BB로 변환합니다.
  3. BB의 마지막 문자를 확인합니다. 마지막 문자는 B입니다. 이 경우 BB를 뒤집고 B를 제거하여 B로 변환합니다.
  4. 마지막으로 B의 마지막 문자를 확인합니다. B를 제거하면 빈 문자열이 됩니다.

이 과정에서 S와 T가 동일한 문자열로 변환되었는지 확인할 수 있습니다. 이와 같은 방식으로 다양한 입력에 대해 적용할 수 있으며, 실질적으로 S로 변환이 가능한지를 판단할 수 있습니다.

아래의 표는 예제를 정리한 것입니다.

단계 T 문자열 수행된 연산 결과 문자열
1 BBAA A 제거 BBA
2 BBA A 제거 BB
3 BB B 제거 후 뒤집기 B
4 B B 제거 '' (빈 문자열)

정리 및 결론

백준 12919번 A와 B 2 문제는 문자열 변환 문제로, S에서 T로의 변환을 거꾸로 접근하여 해결할 수 있습니다. 이 과정에서 BFS 또는 DFS 알고리즘을 통해 가능한 모든 경로를 탐색하며, 효율적인 방법으로 문제를 해결할 수 있습니다.

문자열의 길이를 체크하고, 중복된 문자열을 방문하지 않도록 관리하는 것이 성능 최적화에 중요합니다. 문제 해결 과정에서 다양한 경우의 수를 고려하고, 각 단계에서 적절한 연산을 수행함으로써 S와 T의 변환 가능성을 판단할 수 있습니다.

이러한 전략을 통해 문제를 체계적으로 해결할 수 있으며, 다양한 입력에 대한 적용 가능성을 높일 수 있습니다.

관련 영상

같이 보면 좋은 글