문제 출처 - Beakjoon Online Judge
문제는 여기
[문제]
2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라. 부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기 한다.
[입력]
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다.
[출력]
입력된 s와 t의 순서대로 s가 t의 부분 문자열인 경우 Yes라 출력하고 아닐 경우 No라고 출력한다.
[풀이]
1. s문자열과 t문자열을 입력받아 s문자열을 각 문자 별로 비교를 한다.
2. 모든 문자 체크가 끝나면 해당하는 결과를 출력한다.
[접근]
1. s문자열의 각 자리가 t에 순서대로 있는지 체크하면 된다.
2. for문으로 t의 각 문자열을 순차적으로 체크하며 s의 자리와 같다면 s의 자리를 증가시켜주면 된다고 생각하고 이를 코드로 구현하였다.
[코드]
package BOJ_silver;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_S5_6550 {
static String str;
static int idx;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
while((str = br.readLine()) != null) {
st = new StringTokenizer(str);
String s1 = st.nextToken();
String s2 = st.nextToken();
idx = 0;
for (int i = 0; i < s2.length(); i++) {
if (s1.charAt(idx) == s2.charAt(i)) {
idx++;
}
if (idx == s1.length())
break;
}
if (idx == s1.length())
System.out.println("Yes");
else
System.out.println("No");
}
}
}
'문제 풀이 > Baekjoon' 카테고리의 다른 글
[백준] S1 16500번 문자열 판별 (JAVA) (0) | 2021.12.22 |
---|---|
[백준] S3 13241번 최소공배수 (JAVA) (0) | 2021.12.20 |
[백준] S5 1439번 뒤집기 (JAVA) (0) | 2021.12.18 |
[백준] S5 4396번 지뢰 찾기 (JAVA) (0) | 2021.12.17 |
[백준] G5 2023번 신기한 소수 (JAVA) (0) | 2021.12.15 |