본문 바로가기
PS/BOJ

백준 6550 자바 - 부분 문자열 (BOJ 6550 JAVA)

by Nahwasa 2022. 3. 13.

문제 : boj6550

 

 

  s쪽에 포인터를 하나 두고, t쪽에도 포인터를 하나 둔다. 이후 s쪽 포인터를 하나씩 증가시키면서, 해당 포인터가 가르키는 문자가 나올 때 까지 t 포인터를 증가시키면서 찾는다. 최종적으로 t포인터가 t를 전부 찾기 전까지 s쪽 포인터가 끝까지 도달한다면 Yes가 된다. 이하 '예제 입력 1'의 3번째 테스트 케이스를 찾는 과정을 그려봤다. s쪽 포인터가 si, t쪽 포인터가 ti 이다. 

 

 

 

코드 : github

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        while (true) {
            String str = br.readLine();
            if (str == null) break;
            StringTokenizer st = new StringTokenizer(str);
            String s = st.nextToken();
            String t = st.nextToken();

            int si = 0;
            int ti = 0;
            while (si < s.length()) {
                while (ti < t.length() && t.charAt(ti) != s.charAt(si)) ti++;
                if (ti < t.length() && s.charAt(si) == t.charAt(ti)) { si++; ti++; }
                else break;
            }
            sb.append(si == s.length() ? "Yes\n" : "No\n");
        }
        System.out.print(sb);
    }

    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

댓글