문제
예시 코드
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로 변환이 가능합니다.
'Code Problems > Greedy' 카테고리의 다른 글
BOJ 1700 멀티탭 스케줄링 (1) | 2023.12.02 |
---|