반응형
문제
12904번: A와 B
수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다. 이런 사실에 놀란 수
www.acmicpc.net
예시 코드
function solution() {
const S = input();
let T = input().split("");
while (S.length !== T.length) {
if (T.at(-1) === "A") T = T.slice(0, -1);
else if (T.at(-1) === "B") T = T.slice(0, -1).reverse();
else break;
}
return S === T.join("") ? 1 : 0;
}
풀이
이 문제는 그리디를 이용해 풀 수 있는데요.
문제에서 말하는 대로 S -> T로의 변환이 아닌 T -> S로의 역변환이 가능한지를 확인합니다.
핵심 포인트는 문자열 T의 마지막 문자가 'A'인지 'B'인지에 따라 적절한 변환을 선택하는 것입니다.
로직은 크게 세 단계로 나누어져 있습니다.
- 문자열 분석 단계
주어진 문자열 T의 마지막 문자가 'A'인지 'B'인지를 확인합니다. - 변환 단계
'A' 또는 'B'에 따라 알맞은 변환을 수행합니다. 'A'라면, 문자열 T의 마지막 문자를 제거하고, 'B'라면 문자열 T를 뒤집은 후 마지막 문자를 제거합니다. - 비교 단계
이 변환 과정을 문자열 S와 T의 길이가 동일해질 때까지 반복하며, 마지막에는 S와 T가 동일한지 확인합니다.
e.g.
S = 'B', T = 'ABBA'인 경우
T는 'ABBA' -> 'ABB' -> 'BB' -> 'B' 순으로 변환되며 이는 S와 동일합니다. 따라서 S -> T로 변환이 가능합니다.
'Coding Problem > Greedy' 카테고리의 다른 글
[BOJ 1339] 단어 수학 (0) | 2025.03.12 |
---|---|
[BOJ 1202] 보석 도둑 (0) | 2025.03.09 |
[프로그래머스] 단속카메라 (0) | 2024.11.14 |
[BOJ 1700] 멀티탭 스케줄링 (1) | 2023.12.02 |