백준 알고리즘 6550번
2024, Jan 31
6550번 부분문자열 문제
[링크] : https://www.acmicpc.net/problem/6550
주의해야할 점
- 예제처럼 무한 반복문이라는 것
- Yes, No 처럼 모두가 대문자는 아니다.
- 전체 문자열 t의 몇개의 문자를 제거하고 합쳤을 경우 s가 되어야 한다.
힘들었던 점
- 오랜만에 첫 알고리즘 문제라 가물가물하며 풀었는데 생각보다 단순하게 접근하면 풀기 쉬웠던 문제이다.
- 다만, j(문자열 s의 주소)를 0부터 접근해서 일치시의 조건문을 이렇게 접근하였다.
if(j == s.length()-1)
하지만 입력값이 AA Abc 인경우 A값이 두개이지만 1값으로 만족하기 때문에 -1값은 옳지 않는다.
#include <iostream>
using namespace std;
int main()
{
string s; //문자열 s 선언
string t; //문자열 t 선언
while (cin >> s >> t) //문제에선 문자열을 계속 입력받기 때문에 무한반복으로 s와 t를 입력받는다.
{
int check = 0; //부분문자열이 맞는지 확인 0이면 false 1 이면 true
int j = 0; //부분 문자열 s 위치를 저장하기 위한 변수
for (int i = 0; i < t.length(); i++) //문자열 s는 t의 일부이기 때문에 t의 전체를 문자열 비교한다.
{
if (s[j] == t[i]) //문자열 위치가 같은경우 j++ 을 하여 다음 문자 검사
{
j++;
}
if (j == s.length()) //j의 값 즉 부분무자열 s의 위치가 모두 도달한경우 check 값을 true로 변환
{
check = 1;
}
}
if (check == 1)
{
cout << "Yes" << endl; //부분문자열일경우 Yes 출력
}
else
{
cout << "No" << endl; //부분무자열이 아닌경우 No 출력
}
}
return 0;
}