[백준] 1543 문서 검색 JAVA

·2024년 3월 17일

1일1백준 -Java-

목록 보기
13/60

문제

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.

세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.

출력

첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.

예제 입력

ababababa
aba

예제 출력

2

내가 했던 풀이 방법

  1. 입력받은 문서 길이만큼 for문을 돌린다. 매번 check(검사를 위한 문자열 변수)를 초기화해준다.
  2. 남은 문자열의 길이가 검색하고 싶은 단어보다 같거나 길 때(index 범위를 나가지 않게 하기 위함), 검색하고 싶은 단어 길이만큼 현재 위치부터 입력받은 문서의 일부를 check에 저장한다.
  3. check 문자열과 검색하고 싶은 단어가 일치할 경우 count를 증가시켜주고, i(입력받은 문서의 인덱스)를 검색한 문자 뒤로 보내준다.

코드

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

public class Main {
        public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String string = br.readLine();
        String find = br.readLine();

        int count = 0;
        String check = "";
        for(int i=0; i<string.length(); i++) {
            check = "";
            if(find.length()<=string.length()-i) {
                for(int j=0; j<find.length(); j++) {
                    check += string.charAt(i+j);
                }
                if(check.equals(find)) {
                    count++;
                    i = i+find.length()-1;
                }
            }
        }
        System.out.print(count);
    }   
}

회고

확실히 정답 비율이 낮아질수록 예제로 주는 입/출력만 맞는다고해서 성공하기에는 힘들어지는 것 같다. 반례들을 꼭 확인해주는 습관을 가져야겠다.

profile
Frontend🍓

0개의 댓글