‡ CODING TEST STUDY ‡

[JAVA] SWEA | 1213. [S/W 문제해결 기본] 3일차 - String

Trudy | 송연 2024. 11. 16. 16:51

문제

https://swexpertacademy.com/main/solvingProblem/solvingProblem.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 


접근

주어진 문자열을 처음부터 탐색을 시작하는 데, 만약 찾으려는 문자열 x의 시작점이 같으면 check 함수가 실행되어 찾는 문자열이 완전하게 존재하는 지 확인한다. 

 

check 함수는 아래와 같다. 

	public static boolean check(String x, String s, int start) {
		if(s.length() < start + x.length())return false;
		for(int k=1; k<x.length(); k++) {
			if(x.charAt(k) != s.charAt(k+start)) return false;
		}
		
		return true;
	}

 

여기에서 2번째 줄 if문으로 길이를 check 해주지 않는다면 아마 3번째 testcase가 통과하지 않을 거고 답이 19인데 20으로 출력될 것이다. 

또, 그렇게 하지 않으면 indexOutOfBounds 에러가 뜨기 때문에 잘 확인해줘야 한다. 

 

그렇게 완성된 최종 코드는 아래와 같다. 


최종 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
 
class Solution
{
    public static boolean check(String x, String s, int start) {
        if(s.length() < start + x.length())return false;
        for(int k=1; k<x.length(); k++) {
            if(x.charAt(k) != s.charAt(k+start)) return false;
        }
         
        return true;
    }
     
    public static void main(String args[]) throws Exception
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
         
        //Test case 10개
        for(int i=1; i<=10; i++) {
            br.readLine();
            String x = br.readLine();
            String s = br.readLine();
             
            int count = 0;
            for(int j=0; j<s.length(); j++) {
                //첫 번째 글자가 같으면 검사 시작
                if(s.charAt(j) == x.charAt(0)) {
                    boolean flag = check(x,s,j);
                     
                    if(flag) {
                        j+= x.length() - 1;
                        count++;
                    }
                }
            }
             
            System.out.printf("#%d %d\n", i, count);
        }
    }
}