https://www.acmicpc.net/problem/1543
문제
- 첫째 줄에 문서 document ( 1 <= document.length() <= 2500 ) 가 입력된다.
- 둘째 줄에 검색할 단어 word ( 1 <= word.length() <= 50 ) 가 입력된다.
- 문서와 단어는 알파벳 소문자와 공백으로 이루어져있으며, 문서와 검색하려는 단어가 주어질 때, 단어가 최대 몇 번 중복되지 않게 등장하는지 횟수를 세어 출력하라.
정답 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Objects;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String document = br.readLine();
String word = br.readLine();
int count = 0;
for (int i = 0; i <= document.length() - word.length(); i++) {
if (document.charAt(i) == word.charAt(0)
&& Objects.equals(document.substring(i, i + word.length()), word)) {
count++;
i += word.length() - 1;
}
}
System.out.println(count);
}
}
반복문에서 문서 전체의 철자와 단어의 첫 철자를 비교하여 같다면 substring으로 문서와 단어를 비교하도록 했다.
substring 함수를 이용해 문서에서 단어의 크기만큼 잘라내어 단어와 비교하도록 했는데,
여기서 왜 문서의 철자와 단어의 첫 철자를 비교하였냐면 문서의 모든 부분에 대해 substring을 사용하는 것은 철자 하나를 비교한 후 하는 것보다 시간이 오래 걸릴 것 같아서 이렇게 하도록 했다.
이 때 둘이 같다면 출력할 변수를 1 증가시킨다.
그리고 i += word.length() - 1 부분에서는 중복되지 않게 비교한 부분을 제외하기 위해 단어의 길이만큼 해당 인덱스에 더해주어 같은 부분을 넘어가도록 한다.
-1을 빼주는 이유는 반복문이 시작될 때마다 1씩 증가시키므로 이 부분을 고려하여 1을 뺀 후 더해주도록 했다.
'백준 문제 풀이 > 백준 (JAVA)' 카테고리의 다른 글
JAVA 백준 13223 소금 폭탄 (문자열) (1) | 2025.05.01 |
---|---|
JAVA 백준 2744 대소문자 바꾸기 (문자열) (0) | 2025.05.01 |
JAVA 백준 1919 애너그램 만들기 (문자열) (0) | 2025.04.30 |
JAVA 백준 10845 큐 (큐) (0) | 2025.04.29 |
JAVA 백준 2164 카드 2 (큐) (0) | 2025.04.29 |