[백준-실버4]문서 검색 - Java

iamjinseo·2023년 1월 31일
0

문제풀이-Java

목록 보기
5/53


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


문제 설명

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

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

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

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

예제 입력 1
ababababa
aba

예제 출력 1
2

예제 입력 2
a a a a a
a a

예제 출력 2
2

예제 입력 3
ababababa
ababa

예제 출력 3
1

예제 입력 4
aaaaaaa
aa

예제 출력 4
3


풀이

package silver4;

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

public class B1543 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String str = br.readLine();
		String command = br.readLine();
		StringBuilder sb = new StringBuilder(); //str에서 한글자씩 읽어들이며 command가 포함돼있는지 검사하기 위한 용도
		int res = 0;
		
		for (int i = 0; i < str.length(); i++) {
			sb.append(str.charAt(i));
			if(sb.toString().contains(command)) {
				res++;
				sb.setLength(0); //command가 포함되었으므로 sb초기화
			}
		}
		System.out.println(res);
	}

}

검사하고자 하는 문자열을 한글자씩 읽어들이며 StringBuilder객체 sb에 넣는다.
만약 그 객체가 찾고자 하는 문자열을 포함하면 res를 늘리고 sb를 초기화한다.

결과


남의 코드

package silver4;

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

public class B1543 {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		String s1 = br.readLine();
		String s2 = br.readLine();
		
		int size = s1.length();
		
		s1 = s1.replace(s2, "");
		System.out.println((size - s1.length())/s2.length());
	}

}

출처: https://comain.tistory.com/313

더 빠른 코드를 알고 싶어 찾아보게 되었다.
s1에서 s2를 없애버리고(s1.replace(s2, ""))나오는 문자열과 s1의 길이의 차를 구한다.
예를 들어 1234512345에서 234를 빼면 1515가 남는다.
그럼 1234512345의 길이와 1515의 길이의 차는 6이다.
6에서 s2의 길이만큼 나누면 s2의 개수가 나온다.

profile
일단 뭐라도 해보는 중

0개의 댓글