백준 1543 문제 문서 검색 풀이이다.
이 문제는 들어온 문자열 a가 입력한 기준 문자열 b 안에 동일한 문자열이 몇번 들어가는지를 풀어내는 문제이다.
문제 설명
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.
세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.
출력
첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.
문제 링크 : https://www.acmicpc.net/problem/1543
나는 첫 문자(char)만 비교하여 같은 시작문자인 부분부터 문자크기만큼 문자열을 만들어 비교해주고, 같으면 cnt를 증가시켜주었다.
같은 문자가 나왔다면 해당 문자 크기 만큼 건너 뛰어주는 코드인
i+=target.length()-1; // 반복문으로 돌아가면 i가 증가할 것이기 때문에 1을 빼준다.
해당 코드를 반복에 추가해주어 문제를 해결했다.
결과 코드
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 doc = br.readLine();
String target = br.readLine();
int targetCnt =0;
for(int i = 0;i<doc.length();i++){ //문자열 doc 크기만큼 반복
if(doc.charAt(i) == target.charAt(0)){ // target의 첫 문자와 같은 값을 검사
if(i+target.length() > doc.length()){ //doc i 번째에서 target문자만큼 길이가 되는지 검사
continue;
}
String result = doc.substring(i,i+target.length()); //i문자 target크기만큼 문자열 자르기
if(result.equals(target)){ //위에서 검사한 해당 문자열이 target과 같은지 확인
i+=target.length()-1; // 반복문으로 돌아가면 i가 증가할 것이기 때문에 1을 빼준다.
targetCnt++;
}
}
}
System.out.println(targetCnt);
}
}