공부하기/백준

[Java] 백준 풀기 6550 - 부분 문자열

XEV 2023. 8. 18. 23:38

자바 백준 6550번

실버 5

https://www.acmicpc.net/problem/6550

 

6550번: 부분 문자열

입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 문자열 s 와 t가 빈칸을 사이에 두고 들어온다. s와 t의 길이는 10만을 넘지 않는다.

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 그리디 알고리즘, 문자열

 

 

 

 

 

문제 풀기

문자열 s에서 순서대로 하나씩 문자를 선택하고, for loop로 문자열 t의 index를 하나씩 올려가며 같은 문자가 있는지 확인한다.

같은 문자가 있으면 sIndex를 하나씩 늘려가며, 최종 sIndex와 s 문자열 길이 s.length()가 같으면 "Yes"를 출력한다.

 

 

 

 

 

코드 보기

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        // 입력이 있는 동안 반복
        while (sc.hasNextLine()) {
            // 입력된 문자열을 공백을 기준으로 나누어 배열에 저장
            String[] input = sc.nextLine().split(" ");
            String s = input[0];
            String t = input[1];
            
            // isSubstring 함수를 사용하여 s가 t의 부분 문자열인지 확인
            if (isSubstring(s, t)) {
                // 부분 문자열인 경우 "Yes" 출력
                System.out.println("Yes");
            } else {
                // 부분 문자열이 아닌 경우 "No" 출력
                System.out.println("No");
            }
        }
    }
    
    // 부분 문자열 여부를 판단하는 함수
    private static boolean isSubstring(String s, String t) {
        int sIndex = 0;  // 문자열 s의 인덱스를 초기화
        
        // 문자열 t의 각 문자에 대해서 반복
        for (int i = 0; i < t.length(); i++) {
            if (sIndex < s.length() && s.charAt(sIndex) == t.charAt(i)) {
                // sIndex가 s의 길이보다 작고, 문자열 s의 현재 문자와 t의 현재 문자가 같은 경우
                sIndex++;  // sIndex 증가 (s의 다음 문자를 검사하기 위함)
            }
        }
        
        // sIndex가 s의 길이와 같으면 s가 t의 부분 문자열 true을 반환
        return sIndex == s.length();
    }
    
}