백준 32292번 - ABB to BA (Easy) 🔤
🔗 문제 링크: https://www.acmicpc.net/problem/32292
32292번: ABB to BA (Easy)
문자열 내에서 특정 규칙을 따라 최소 연산으로 변환하는 문자열 처리 문제입니다.
www.acmicpc.net
📝 문제 요약
- 문자열 S가 주어집니다.
- 문자열 S는 'A'와 'B'로만 구성되어 있습니다.
- 문자열중 ABB는 BA로 치환된다. (연쇄 가능)
🧷 문제 분류
- 문자열
- 브루트포스
📦 제출 정보
🔗 소스코드: GitHub - cbkpar/BOJ/boj_32292.cpp
| 채점 번호 | 아이디 | 문제 번호 | 결과 | 메모리 | 시간 | 언어 | 코드 길이 |
| 93878184 | cbkpar | 32292 | 맞았습니다!! | 2024 KB | 4 ms | C++17 | 461 B |
💻 코드 (C++)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int iT;
cin >> iT;
for (int t = 1; t <= iT; ++t)
{
int iN;
cin >> iN;
string strWord;
cin >> strWord;
while (true)
{
if (strWord.find("ABB") == string::npos)
{
break;
}
strWord.replace(strWord.find("ABB"), 3, "BA");
}
cout << strWord << "\n";
}
return 0;
}
💡 풀이 방법
🔍 문제 접근
- "ABB"를 "BA"로 바꾸는 작업을 반복하여 더 이상 "ABB"가 없을 때 문자열을 출력하는 문제.
- 한 번의 치환이 또 다른 "ABB" 패턴을 생성할 수 있으므로 반복적인 탐색과 치환이 필요합니다.
🧠 핵심 아이디어
find()함수를 사용하여 문자열에서 "ABB"를 찾고,replace()로 "BA"로 치환합니다.- 이 과정을
"ABB"가 더 이상 발견되지 않을 때까지 반복합니다. - 모든 테스트 케이스에 대해 위의 작업을 수행한 후 최종 문자열을 출력합니다.
⚙️ 구현 방식
- 테스트 케이스 개수 T를 입력받습니다.
- 각 테스트 케이스마다 문자열을 입력받습니다.
while반복문을 사용해 문자열에 "ABB"가 존재하는지 확인하고, 있다면replace를 수행합니다.- 최종 변환된 문자열을 출력합니다.
✅ 시간 복잡도
- 각
find(),replace()연산은 O(N) - 반복 횟수를 K라고 하면 전체 시간 복잡도는 O(K × N)
- 실제 데이터에선 K가 작기 때문에 충분히 빠르게 동작합니다
🧪 예제 입력 / 출력
📘 예제 1
입력
3
3
ABB
9
ABABABBBB
12
AAAAAABBBBBB
출력
BA
BAABA
AAAABABA
'백준온라인' 카테고리의 다른 글
| [백준온라인] 13018번 특이한 수열 (0) | 2025.05.05 |
|---|---|
| [백준온라인] 9335번 소셜 광고 (0) | 2025.05.03 |
| [백준온라인] 33702번 비밀번호 (0) | 2025.05.02 |
| [백준온라인] 32515번 BB84 (0) | 2025.05.01 |
| [백준온라인] 27468번 2배 또는 0.5배 (0) | 2023.09.21 |