백준 1543 : 문서검색
백준 1543 : 문서검색
문제 url : https://www.acmicpc.net/problem/1543
문서 검색 성공 풀이
시간 제한 | 메모리 제한 | 제출 | 정답 | 맞은 사람 | 정답 비율 |
---|---|---|---|---|---|
2 초 | 128 MB | 1646 | 500 | 384 | 30.141% |
문제
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만드려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.
세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.
출력
첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.
예제 입력
ababababa aba
예제 출력
2
해설
문자 str과 sub_str 을 입력 받은 후, str 안에 sub_str이 중복 없이 몇 개 들어있는지 출력하는 문제
직관적으로 앞에서부터 일치하는 문자열이 있는지 검사하고, 찾은 후 일치하는 다음번 문자부터 끝까지의 문자열을 추출하여 문자열 검사를 반복해주면 된다.
JAVA의 indexOf() 메서드를 이용하여 str 안에 sub_str이 있는지 앞에서부터 찾을 수 있다.
substring() 메서드를 이용하여 일치하는 이후 문자열을 자르고, 자른 문자열에서 indexOf() 메서드로 다시 문자열 검사를 해주면 된다.
소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.nextLine(); String sub = s.nextLine(); int result = 0; for(;str.indexOf(sub) > -1; result++) { str = str.substring(str.indexOf(sub) + sub.length(), str.length()); } System.out.println(result); } } |
결과