알고리즘
백준 6550 부분 문자열
킨글
2024. 7. 29. 22:50
설명
입력을 받을 때 끝내는 조건에 대해서 알지 못해서 조금 삽질했다.
그래서 br.readLine() 시에 null이거나 ""이면 끝내도록 했다.
문제 풀이는 아래와 같이 접근했다.
1. s 문자 1개를 집어서 t 문자를 순회
2. 없으면 No
3. 있으면 s 문자를 또 1개 집어서 다음 idx부터(searchIdx+1) t문자를 순회한다.
코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
// 6550
public static void main(String[] args) throws IOException {
process();
}
private static void process() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
String str;
while(true){
str = br.readLine();
if(str == null || str.isEmpty()) break;
st = new StringTokenizer(str);
String s = st.nextToken();
String t = st.nextToken();
int sIdx = 0;
int searchIdx = 0;
while(true) {
if(t.contains(s)) {
bw.write("Yes\n");
break;
}
char c = s.charAt(sIdx);
boolean isMatch = false;
for (int i = searchIdx; i < t.length(); i++) {
// 동일한 것을 찾으면
if(c == t.charAt(i)) {
searchIdx = i+1;
sIdx++;
isMatch = true;
break;
}
}
if(!isMatch) {
bw.write("No\n");
break;
}
if(sIdx == s.length()) {
bw.write("Yes\n");
break;
}
}
}
bw.flush();
bw.close();
br.close();
}
}