이 문제를 풀때 착각해서 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가 들어간 문자열을 나누기하면 답이 나옴
}
}
'백준 알고리즘 > 브루트 포스(완전 탐색)' 카테고리의 다른 글
[백준 셀프넘버 - 4673] 자바 Java [브루트 포스 알고리즘] (1) | 2023.10.06 |
---|---|
[백준 1251 단어 나누기] - Java 자바 [브루트 포스] (1) | 2023.10.02 |
[백준 2003] 수들의 합 2 Java - [투 포인터 , 브루트 포스] (0) | 2023.10.01 |
[백준 2231] 분해합 - Java 자바 (브루트 포스) (0) | 2023.09.26 |
[백준 2798] 블랙잭 - Java 자바 [1] -풀이 및 해설 (0) | 2023.09.23 |