티스토리 뷰

알고리즘/백준

백준 12904 A와 B C++

4567은 소수 2022. 4. 7. 01:50

https://www.acmicpc.net/problem/12904

 

12904번: A와 B

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

www.acmicpc.net

A,B로만 이루어진 문자열이 주어졌을 때

1. 문자열 뒤에 A 붙이기

2. 뒤집고 B 붙이기 

2가지 연산이 가능합니다.

 

이 때 주어진 문자열 S로 T를 만들 수 있는지 확인하는 문제입니다. 

 

문제를 반대로 생각하면, T의 마지막이 A이면 A를 떼버리고, 마지막이 B이면 떼고 뒤집으면 됩니다.

그리고 S와 비교하여 같은지 아닌지 판단하면 됩니다.

 

코드는 다음과 같습니다.

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

string S, T;

void init()
{
	cin >> S >> T;
}
// T를 기준으로 마지막이 A면 A 빼주고
// B면 빼주고 뒤집기 반복
// S 나오면 1, 아니면 0

int calculate(string str) {
	int len = str.size();
	if (str == S)
		return 1;
	else if (len == S.size() && str != S)
		return 0;
	else {
		if (str[len - 1] == 'A')
			return calculate(str.substr(0, len - 1));
		else {
			string substr = str.substr(0, len - 1);
			string reversestr(substr.rbegin(), substr.rend());
			return calculate(reversestr);
		}
	}
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	init();
	cout << calculate(T);
}

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 11660 구간 합 구하기 5 C++  (0) 2022.06.01
백준 2210 숫자판 점프 C++  (0) 2022.05.06
백준 15486 퇴사 2 C++  (0) 2022.04.02
백준 3955 캔디 분배 C++  (0) 2022.03.29
백준 16946 벽 부수고 이동하기 4 C++  (0) 2022.03.18
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함