Code Problems/Greedy

BOJ 12904 A와 B

Yepchani 2023. 11. 25. 22:04

문제

 

 

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'인지에 따라 적절한 변환을 선택하는 것입니다.

 

로직은 크게 세 단계로 나누어져 있습니다.

  1. 문자열 분석 단계
    주어진 문자열 T의 마지막 문자가 'A'인지 'B'인지를 확인합니다.
  2. 변환 단계
    'A' 또는 'B'에 따라 알맞은 변환을 수행합니다. 'A'라면, 문자열 T의 마지막 문자를 제거하고, 'B'라면 문자열 T를 뒤집은 후 마지막 문자를 제거합니다.
  3. 비교 단계
    이 변환 과정을 문자열 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