백준/그리디

[백준 12904번 / C++] A와 B

배발자 2022. 4. 5.
반응형

그리디 문제이다. 

 

#접근 방법

 

처음에 문제를 읽어봤을 때 이걸 어떻게 해야하지..? 생각이 들수도 있다.

 

나도 그랬다. 

 

문자열 S에 언제 A를 추가해야할지, 또는 언제 B를 추가하고 뒤집어야하는지.. 

 

한 3분정도 생각하다가 답이 안나와서 만들어야 할 문자열에서 A와 B를 빼면 되지 않을까? 라는 생각이 들었다.

 

한번쯤은 직관적으로 문제에 접근해도 좋지만 만약 안풀린다면 추가하는 것이 아니라 반대로 생각해서 빼보는 방식도 고려해봐야할 것이다. 

 

즉, 문자열 S1에서 만들어야 할 문자열이 S2 라면, 

 

S2에서 A를 빼주고, 또는 B를 빼주고 문자열을 뒤집는다. 

 

언제동안? S1과 S2의 길이가 같을때까지!

 

문자열의 길이가 같아졌을 때 같은 문자열이 맞는지 비교해서 출력하면 끝이다. 

 

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std; 

int main() {
	string s1, s2; 
	cin >> s1 >> s2; 
	int idx = s2.size() - 1; 
	while (s1.size() < s2.size()) {

		if (s2[idx] == 'A')s2.pop_back(); 
		else {
			s2.pop_back(); 
			reverse(s2.begin(), s2.end()); 
		}
		idx--; 

	}
	if (s1 == s2)cout << 1;
	else cout << 0;  
}

 

 

12904번: A와 B

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

www.acmicpc.net

반응형

'백준 > 그리디' 카테고리의 다른 글

[백준 1461번 / C++] 도서관  (0) 2022.04.06
[백준 13904번 / C++] 과제  (0) 2022.04.05
[백준 1449번 / C++] 수리공 항승  (0) 2022.04.05
[백준 13458번 / C++] 시험 감독  (0) 2022.03.31
[백준 12845번 / C++] 모두의 마블  (0) 2022.03.31

댓글