Shiny Sky Blue Star

백준 문제 풀이/백준 (JAVA)

JAVA 백준 1543 문서 검색 (문자열)

gamja00 2025. 4. 30. 23:57

 

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

 


문제

  1. 첫째 줄에 문서 document ( 1 <= document.length() <= 2500 ) 가 입력된다.
  2. 둘째 줄에 검색할 단어 word ( 1 <= word.length() <= 50 ) 가 입력된다.
  3. 문서와 단어는 알파벳 소문자와 공백으로 이루어져있으며, 문서와 검색하려는 단어가 주어질 때, 단어가 최대 몇 번 중복되지 않게 등장하는지 횟수를 세어 출력하라.

 

 

정답 코드

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String document = br.readLine();
        String word = br.readLine();

        int count = 0;

        for (int i = 0; i <= document.length() - word.length(); i++) {
            if (document.charAt(i) == word.charAt(0)
                    && Objects.equals(document.substring(i, i + word.length()), word)) {
                count++;
                i += word.length() - 1;
            }
        }

        System.out.println(count);
    }
}

 

 

반복문에서 문서 전체의 철자와 단어의 첫 철자를 비교하여 같다면 substring으로 문서와 단어를 비교하도록 했다.

 

substring 함수를 이용해 문서에서 단어의 크기만큼 잘라내어 단어와 비교하도록 했는데,

여기서 왜 문서의 철자와 단어의 첫 철자를 비교하였냐면 문서의 모든 부분에 대해 substring을 사용하는 것은 철자 하나를 비교한 후 하는 것보다 시간이 오래 걸릴 것 같아서 이렇게 하도록 했다.

 

이 때 둘이 같다면 출력할 변수를 1 증가시킨다.

 

그리고 i += word.length() - 1 부분에서는 중복되지 않게 비교한 부분을 제외하기 위해 단어의 길이만큼 해당 인덱스에 더해주어 같은 부분을 넘어가도록 한다.

-1을 빼주는 이유는 반복문이 시작될 때마다 1씩 증가시키므로 이 부분을 고려하여 1을 뺀 후 더해주도록 했다.