6550 - 부분 문자열

재찬·2023년 2월 22일
0

Algorithm

목록 보기
58/64

문제

코드

#include <bits/stdc++.h>
using namespace std;

string s, t;
int k;
bool flag;

void solve(string a, string b){
	k = 0;
	for(int i = 0; i < a.size(); i++){
		if(b.find(a[i]) != string::npos){
			int idx = b.find(a[i]);
			b.erase(0,idx+1);	
		} 
		else flag = 0;
	}
	if(flag) cout << "Yes" << '\n';
		else cout << "No" << '\n';
}

int main(){
	while(cin >> s >> t){
		flag = 1;
		solve(s,t);
	}
}

풀이

기준 문자열과 삭제 하면서 비교 해나갈 문자열을 각각 s,t라고 하겠다.
입력을 받고 기본적인 flag = 1로 설정한다. 아무런 문제가 발견 안되면 flag = 1인 상태로 바로 Yes를 출력, 문제가 발견되면 No를 출력한다.
solve 함수에서 체크할 것은 기준 문자열을 처음부터 돌며 비교 문자열에 있는지 체크한다.
만약 비교 문자열에 존재한다면 해당 index까지 문자열을 삭제한다.
만약 존재하지 않는다면 무조건 No이기 때문에 flag를 0으로 한다.

결과

후기

흠 그리디라고 생각해서 반례가 있나 생각을 해보는데 전혀 반례가 없었다.
출력 문자가 Yes, No인데 YES, NO로 출력 값을 설정해서 정말 어디가 틀린지 모르겠었다. 다른 방식으로 접근해보려다가 늦게나마 알아차려서 다행이다...

0개의 댓글