본문 바로가기

코딩테스트/백준

BOJ-12904 A와B Swift

문제

수빈이는 A와 B로만 이루어진 영어 단어가 존재한다는 사실에 놀랐다. 대표적인 예로 AB (Abdominal의 약자), BAA (양의 울음 소리), AA (용암의 종류), ABBA (스웨덴 팝 그룹)이 있다.

이런 사실에 놀란 수빈이는 간단한 게임을 만들기로 했다. 두 문자열 S와 T가 주어졌을 때, S를 T로 바꾸는 게임이다. 문자열을 바꿀 때는 다음과 같은 두 가지 연산만 가능하다.

  • 문자열의 뒤에 A를 추가한다.
  • 문자열을 뒤집고 뒤에 B를 추가한다.

주어진 조건을 이용해서 S를 T로 만들 수 있는지 없는지 알아내는 프로그램을 작성하시오. 

입력

첫째 줄에 S가 둘째 줄에 T가 주어진다. (1 ≤ S의 길이 ≤ 999, 2 ≤ T의 길이 ≤ 1000, S의 길이 < T의 길이)

출력

S를 T로 바꿀 수 있으면 1을 없으면 0을 출력한다.

내가 푼 풀이

- S를 T로 만들기에 여러가지 경우의 수가 존재할꺼라 생각한다.

- 주어진 T를 역으로 연산해서 S가 되는지 판단했다.

- 두가지 연산결과는 A혹은 B가 뒤에 붙으므로 연산결과는 항상 다를것이다.

- 맨 뒤 문자가 A면 1번연산, B면 2번연산으로 역으로 제거하였다.

 

import Foundation

var s1 = Array(readLine()!).map{ String($0) }
var s2 = Array(readLine()!).map{ String($0) }

// S 와 T가 같아질때까지
// 맨 뒤 문자에 따라 연산을 달리한다.
while s2.count != s1.count {
    var lastStr = s2.removeLast()
    if lastStr == "B" {
        s2 = s2.reversed()
    }
}
if s1 == s2 {
    print(1)
} else {
    print(0)
}

'코딩테스트 > 백준' 카테고리의 다른 글

BOJ-9184 신나는 함수 실행 Swift  (0) 2023.06.01
BOJ-11724 연결 요소의 개수 Swift  (0) 2023.05.31
BOJ-2225 합분해 Swift  (0) 2023.05.31
BOJ-1697 숨바꼭질 Swift  (0) 2023.05.30
BOJ-7576 토마토 Swift  (0) 2023.05.30