본문 바로가기
Problem Solving/Baekjoon

[백준] 5534 간판 - Brute Force / Java

by graycode 2023. 11. 25.

 문제 링크

 

5534번: 간판

첫째 줄에 오래된 간판의 수 N이 주어진다. (1 ≤ N ≤ 100) 둘째 줄에는 상근이가 새로 연 편의점의 이름이 주어진다. 이름은 알파벳 소문자로만 이루어져 있고, 길이는 3자 이상, 25자 이하이다. 다

www.acmicpc.net

 

 풀이 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

    static int t, s;
    static String tgt, src;

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine()), cnt = 0;
        t = (tgt = br.readLine()).length();

        while (n-- > 0) {
            s = (src = br.readLine()).length();
            for (int i = 1; i <= s / (t - 1); i++) {
                if (compare(i)) {
                    cnt++;
                    break;
                }
            }
        }

        bw.write(String.valueOf(cnt));
        bw.flush();
    }

    private static boolean compare(int gap) {
        for (int i = 0; i < s - t + 1; i++) {
            int idx = i, j;
            for (j = 0; j < t && idx < s; j++, idx += gap) if (tgt.charAt(j) != src.charAt(idx)) break;

            if (j == t) return true;
        }

        return false;
    }

}

댓글