![]()
문제 이해

문제에서 주어진 두 문자열 S와 T는 각각 'A'와 'B'로 이루어져 있습니다. 여기서 S는 변환의 시작점, T는 최종 목표 문자열입니다.
문제의 조건은 두 가지 연산으로 문자열을 조작할 수 있다는 것입니다.- 문자열의 뒤에 'A'를 추가한다.
- 문자열의 앞에 'B'를 추가한 후, 문자열을 뒤집는다.
이러한 연산을 통해 S에서 T로 변환할 수 있는지 확인해야 합니다. 주의해야 할 점은 S의 길이는 T의 길이보다 짧다는 것입니다.
이 조건은 문제의 해결을 복잡하게 만들기도 하지만, 반대로 해결 방법을 단순화하는 요소가 될 수 있습니다. 아래의 표는 문제의 입력 및 출력 형식을 정리한 것입니다.| 입력 | 설명 |
|---|---|
| 첫 번째 줄 | 문자열 S (1 ≤ S의 길이 ≤ 49) |
| 두 번째 줄 | 문자열 T (2 ≤ T의 길이 ≤ 50, S의 길이 < T의 길이) |
| 출력 | S를 T로 변환할 수 있으면 1, 없으면 0 |
접근 방법

문제 해결의 핵심은 문자열 변환을 거꾸로 생각하는 것입니다. 즉, 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로 변환이 가능한지를 확인할 수 있습니다. 이때 각 단계에서 문자열의 길이를 체크하여 무한 루프에 빠지지 않도록 주의해야 합니다.
구현 전략

이제 구체적인 구현 전략에 대해 살펴보겠습니다. 구현은 다음과 같은 단계로 나누어집니다.
- 입력을 받아 문자열 S와 T를 저장합니다.
- BFS 또는 DFS를 통해 문자열 T에서 S로 변환할 수 있는 경로를 탐색합니다.
- 각 단계에서 가능한 연산을 수행하고, 변환된 문자열이 S와 일치하는지를 확인합니다.
- 모든 경우를 탐색한 후, S로 변환할 수 있다면 1, 그렇지 않다면 0을 출력합니다.
이 과정에서 문자열의 길이를 체크하고, 이미 방문한 문자열은 다시 방문하지 않도록 관리하는 것이 필요합니다. 이를 통해 불필요한 연산을 줄이고 성능을 최적화할 수 있습니다.
아래의 표는 구현 시 고려해야 할 주요 포인트를 정리한 것입니다.| 포인트 | 설명 |
|---|---|
| 문자열 길이 체크 | S와 T의 길이를 비교하여 연산을 제한합니다. |
| 방문 기록 | 이미 탐색한 문자열을 기록하여 중복을 방지합니다. |
| 연산 수행 | 두 가지 연산을 적절히 수행하여 경로를 탐색합니다. |
예제와 설명
이제 간단한 예제를 통해 문제를 더 잘 이해해 보겠습니다. 예를 들어, S = "A"이고 T = "BBAA"라고 가정해 보겠습니다.
T에서 S로 변환하기 위해서는 다음과 같은 단계를 거칠 수 있습니다.- T의 마지막 문자를 확인합니다. BBAA의 마지막 문자는 A입니다. 따라서 A를 제거하고 BBA로 변환합니다.
- BBA의 마지막 문자를 확인합니다. 마지막 문자는 A입니다. A를 제거하고 BB로 변환합니다.
- BB의 마지막 문자를 확인합니다. 마지막 문자는 B입니다. 이 경우 BB를 뒤집고 B를 제거하여 B로 변환합니다.
- 마지막으로 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의 변환 가능성을 판단할 수 있습니다.이러한 전략을 통해 문제를 체계적으로 해결할 수 있으며, 다양한 입력에 대한 적용 가능성을 높일 수 있습니다.