알고리즘

백준 1543번 문서 검색 - 자바

Won's log 2023. 10. 30. 14:25

1543번은 브루트포스 문제이다.

문제는 다음과 같다.

 

예제 입력과 출력은 다음과 같다!

 

결국 중복되는 단어의 수를 겹치지 않고 세어야하는 것으로 이해했다. 

이번 알고리즘은 검색할 단어를 문서에서 반복해서 확인해야했으므로 

변수 2개를 각각 입력할 수 있도록 하고, 반복된 단어의 수를 알아야 하므로 count 변수를 추가하였다.

이후에는 indexOf() 함수를 사용하여 word라는 단어가 document에 있으면 몇 번째에 있는지 확인할 수 있는 함수를 만들었다.

indexOf()함수에 대한 정보를 주석에 추가하였으니 도움이 되길 바란다!

While문을 사용하여 반복해서 count의 개수를 추가하고 더 이상 단어가 반복되는 것이 없으면 break로 루프를 나오게 하였다.

 

완성 코드

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

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 = findWordsWithoutOverlapping(document, word); // 단어가 반복된 수
        System.out.println(count);
    }

    // 단어가 반복된 수를 찾는 함수
    public static int findWordsWithoutOverlapping(String document, String word) {
        int count = 0; // 단어가 반복된 수 초기화
        int letterNumberOfWord = 0; // 단어의 자리 수
        
        while (letterNumberOfWord < document.length()) {
            int foundIndex = document.indexOf(word, letterNumberOfWord);
                // .indexOf((String str, int fromIndex)
                // .indexOf( "찾을 특정 문자" , "시작할 위치")
                // indexOf() 는 특정 문자나 문자열이 앞에서부터 처음 발견되는 인덱스를 반환
                
            if (foundIndex == -1) {
                // 만약 찾지 못했을 경우 "-1"을 반환한다.
                break;
            }
            
            count++;
            letterNumberOfWord = foundIndex + word.length();
        }
        return count;
    }
}

 

부족한 점이 많은 코드일 수 있으므로 첨언은 환영입니다!

 

 

 

1543번: 문서 검색

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한

www.acmicpc.net