알고리즘

백준 No.6550 부분 문자열 - JAVA

jaewoo 2023. 2. 28. 15:47

 

문제

2개의 문자열 s와 t가 주어졌을 때 s가 t의 부분 문자열인지 판단하는 프로그램을 작성하라. 부분 문자열을 가지고 있는지 판단하는 방법은 t에서 몇 개의 문자를 제거하고 이를 순서를 바꾸지 않고 합쳤을 경우 s가 되는 경우를 이야기한다.

 

sequence subsequence
person compression
VERDI vivaVittorioEmanueleReDiItalia
caseDoesMatter CaseDoesMatter

 

 

풀이

- 입력 크기를 안 준 문제는 처음 풀어봤는데 신선하다.

처음에는 자료구조를 사용해서 contains로 접근했는데 그러면 순서가 상관 없어도 true가 나와버려서 그냥 주어진 값을 바로 charAt으로 대조하면서 맞으면 다음 값을 조회하는 식으로 변경했다. 그리고 그렇게 count도 1씩 증가시켜 count가 처음으로 주어진 문자열과 길이가 같다면 Yes 출력하고 아니면 No 출력하는 방식으로 구현했다.

 


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
          while (true){
              String temp= br.readLine();
              if(temp == null) break;
              StringTokenizer st = new StringTokenizer(temp," ");
              String str = st.nextToken();
              String str2 = st.nextToken();

              checking(str,str2);
          }
    }
    static void checking(String str,String str2){
        int count = 0;
        int index = 0;
        
        for(int i =0;i<str2.length();i++){
            if(str.charAt(index) == str2.charAt(i)){
                index++;
                count++;
                if(index == str.length()) break;
            }
        }

        if(count == str.length()){
            System.out.println("Yes");
        }else {
            System.out.println("No");
        }

    }
}