백준 16172 - 나는 친구가 적다

Updated:

Java

16172 번 - 나는 친구가 적다

문제

접근 방법

코드

import java.util.*;
import java.io.*;

public class Main {
	static int n, result;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String S = br.readLine();
		String K = br.readLine();

		S = S.replaceAll("[0123456789]", "");	// 정규식으로 숫자를 없앰

		int sLen = S.length();
		int kLen = K.length();

		if(sLen < kLen) {
			System.out.println(0);
			br.close();
			return;
		}

		int[] pi = new int[kLen];
		char[] text = S.toCharArray();
		char[] patt = K.toCharArray();

		int j = 0;
		for(int i = 1; i < kLen; i++) {
			while(j > 0 && patt[i] != patt[j]) {
				j = pi[j - 1];
			}
			if(patt[i] == patt[j]) {
				pi[i] = ++j;
			}
		}

		boolean isOk = false;
		for(int i = 0; i < sLen; i++) {
			while(j > 0 && text[i] != patt[j]) {
				j = pi[j-1];
			}
			if(text[i] == patt[j]) {
				if(j == kLen - 1) {
					isOk = true;
					break;
				}
				else
					j++;
			}
		}

		System.out.println(isOk ? 1 : 0);

    	br.close();
	}

	static int stoi(String str) {
    	return Integer.parseInt(str);
    }
}

총평

후기

replaceAll을 사용하여 정규 표현식을

개선할 점