티스토리 뷰
https://www.acmicpc.net/problem/1543
1543번: 문서 검색
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한
www.acmicpc.net
문제
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 단어가 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.
세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.
입력
첫째 줄에 문서가 주어진다. 문서의 길이는 최대 2500이다. 둘째 줄에 검색하고 싶은 단어가 주어진다. 이 길이는 최대 50이다. 문서와 단어는 알파벳 소문자와 공백으로 이루어져 있다.
출력
첫째 줄에 중복되지 않게 최대 몇 번 등장하는지 출력한다.
처음에는 중복되지 않게 단어의 출현횟수를 카운트하기 위해 단어 단위로 자르거나 replace하는 것을 생각했다.
word를 정규 표현식으로 가지는 Pattern을 통해 Matcher를 생성하고, match.find()로 출현횟수를 카운트 해보니
중복없이 제대로 카운트가 되었다.
정규 표현식을 통해 문자를 판별할 때, 하나의 문자를 판별한 후 판별한 문자를 제외한 그 다음 문자부터 다시 판별한다는 것을 알았다.
import java.io.*;
import java.util.regex.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
String word = br.readLine();
int cnt = 0;
Pattern pattern = Pattern.compile(word);
Matcher matcher = pattern.matcher(input);
while(matcher.find())
cnt++;
System.out.println(cnt);
br.close();
}
}
'algorithm > BOJ' 카테고리의 다른 글
[백준/BOJ] 21758번 꿀 따기 자바 풀이 (0) | 2023.01.09 |
---|---|
[백준/BOJ] 2870번 수학숙제 자바 풀이 (1) | 2022.12.10 |
[백준/BOJ] 1516번 게임 개발 자바 풀이 (0) | 2022.11.16 |
[백준/BOJ] 14567번 선수과목 (Prerequisite) 자바 풀이 (0) | 2022.11.16 |
[백준/BOJ] 2252번 줄 세우기 자바 풀이 (0) | 2022.11.16 |