[Java] 백준 1543번 [문서 검색] 자바
백준 1543번
https://www.acmicpc.net/problem/1543
문제
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.
세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.
출력
첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.
예제 입력
ababababa
aba
예제 출력
2
생각하기
ababababa
aba2
생각하기
문자열에서 내가 원하는 문자열을 찾는 방식입니다.
근데, 중복은 되지 않으니까 찾은 문자는 문자열에서 지우면서 나아가면 됩니다.
여기서 String 연산을 할 때
즉, append, delete는 일반 String보다는 StringBuilder가 좋다는 말을 듣고 입력부터
StringBuilder를 사용해서 입력을 받았습니다.
String은 immutable(불변성)의 성질을 가지고 잇어서 문자열 연산에는 효율적이지 않고
StringBuilder의 append, delete를 사용한다면 훨씬 효율적인 작업을 할 수 있습니다.
동작
int count = 0;
int startIndex = 0;
int find_len = find.length();
// find와 똑같은 문자열을 StringBuilder에서 찾아서 해당 index값을 가져옴
// 이후에 StringBuilder에서 delete작업을 하면됨.
// 그리고 count값 증가를 하면 답을 구할 수 있음
while((startIndex = sb.toString().indexOf(find)) != -1) {
sb.delete(0, startIndex + find_len);
count++;
}
System.out.println(count);
search() 메소드를 통해서 전체 문자열인 sb에서
find가 포함되어 있는지 찾습니다.
찾는 방법은 indexOf(find)를 사용해서 sb와 같은 문자가 있으면 index값을 반환받아 해당 시작 인덱스 startIndex에서 find의 문자열 길이 만큼 delete작업을 하면 됩니다.

코드
import java.io.*;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb.append(br.readLine());
String find = br.readLine();
search(find);
} // End of main
static void search(String find) {
int count = 0;
int startIndex = 0;
int find_len = find.length();
while((startIndex = sb.toString().indexOf(find)) != -1) {
sb.delete(0, startIndex + find_len);
count++;
}
System.out.println(count);
}
} // End of class
Author And Source
이 문제에 관하여([Java] 백준 1543번 [문서 검색] 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@lifeisbeautiful/Java-백준-1543번-문서작업-자바
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import java.io.*;
public class Main {
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
sb.append(br.readLine());
String find = br.readLine();
search(find);
} // End of main
static void search(String find) {
int count = 0;
int startIndex = 0;
int find_len = find.length();
while((startIndex = sb.toString().indexOf(find)) != -1) {
sb.delete(0, startIndex + find_len);
count++;
}
System.out.println(count);
}
} // End of class
Author And Source
이 문제에 관하여([Java] 백준 1543번 [문서 검색] 자바), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lifeisbeautiful/Java-백준-1543번-문서작업-자바저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)