2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

[백준 1543] - 문서 검색 [자바] 실버 5

2023. 9. 28. 18:36ㆍ백준 알고리즘/브루트 포스(완전 탐색)

 

 

 

 

 

이 문제를 풀때 착각해서 StringTokenzier를 사용해서 a a a a a 5개가 다 들어오지 않고

a한개만 들어왔다. 

스트링 토큰은 공백 단위로 자동으로 잘라서 aaaaa가 들어오지 않고 a 한개만 들어와서 좀 해맸다.

 

 

[해설 및 풀이]

 

이런 문제의 경우는 외워두면 편하다.

문자열이 있고 이 문자열이 포함된 갯수를 구하라는 문제가 있다면

replace를 쓰면 된다.

 

즉 문자열이 포함된 갯수를 구하라 = replace 공식을 외워두면 편하다.

 

일단 생각해보자.

 

ababababa라는 단어가 있고

 

aba 라는 단어가 있다.

 

aba라는 단어가 포함된 것은 3개로 짤라서 봣을때는

 

aba bab aba 이렇게 나뉨으로 총 2개의 단어가 포함된 것을 알 수 있다.

 

즉 반복문을 돌리기도 까다로운 문제이다.

 

그렇기 때문에 이 replace라는 함수를 모른다면 힘들 수도 있다.

 

replace라는 함수는 

 

문자열에 특정 부분을 다른 문자열로 바꾸는 역활을 한다.

 

즉 예시로 보자면

 

String str = "동해물과 백두산이 마르고 닳도록 하느님이 보우하사 ..";

String result = str.replace("하느님","???");

  System.out.println(result);

 

이런식으로 str에 문자열이 있다. 

 

String result = str.replace(["바꿀 문자열"],["바꾸고 싶은 문자열"]);

 

이런식으로 동작하게 뒤는데

 

나의 경우는 저 문자열에서 하느님이라는 문자열을 ???로 바꾸고싶다.

그렇게 replace를 사용하면 하느님이라고 들어간 문자열은 전부 다 ??? 로 바뀐다.

 

 

 

결과도 이렇게 나오는 것을 볼 수 있다.

 

즉 ababababa라는 단어도 

 

aba를 리플레이스로 사용한다면

 

aba는 세 개의 문자가 포함되어있음으로 aba가 포함되어있는 문자열을 찾게 된다.

 

 

String result = str1.replace(str2,"");

 

 

 



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

public class Main {

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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str1 = br.readLine(); //ababababa
        String str2 = br.readLine(); //aba

        String result = str1.replace(str2,""); //str2 = aba 즉 aba를 찾으면 "" < 값을 없애라는 뜻
        //result의 결과는 bba
        System.out.println(((str1.length()-result.length()) /str2.length()));
        //ababababa 에서 필요없는 부분은 bba 임. 즉 문자열 9개에서 - 3개를 뺀후 aba가 들어간 문자열을 나누기하면 답이 나옴
}
    }