반응형
문서 탐색
주어진 단어가 문서 내에 몇 번 등장하는지 찾는 문제입니다. 이 문서는 두 가지 방법으로 문제를 해결하는 과정을 설명합니다.
예제 설명
- 문서의 첫 글자부터 순회한합니다.
- 문서의 지금 글자부터 주어진 단어와 한글자씩 비교합니다.
- 단어와 완전히 일치하면 개수를 올린다. 해당 단어가 등장한 이후부터 2를 반복한다.
- 단어와 매치되지 않았다면 다음 글자에서 2를 반복한다.
제한
- 시간 제한: 2초
- 메모리 제한: 128MB
- 제출: 2678
- 정답: 11886
- 맞힌 사람: 9525
- 정답 비율: 44.138%
코드 설명
public class SearchDocuments {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 사용자에게 어떤 방법을 사용할지 선택하게 합니다.
System.out.println("방법을 선택하세요. 1 또는 2");
int method = sc.nextInt(); // 방법 선택
sc.nextLine(); // nextInt() 뒤에 오는 nextLine() 호출을 위해 줄바꿈 문자 소비
if (method == 1) {
// 사용자로부터 전체 문서와 검색할 단어를 입력받습니다.
String doc = sc.nextLine(); // 문서 입력
String word = sc.nextLine(); // 검색할 단어 입력
searchMethod1(doc, word); // 방법 1을 선택한 경우
} else if (method == 2) {
// 사용자로부터 전체 문서와 검색할 단어를 입력받습니다.
String doc = sc.nextLine(); // 문서 입력
String word = sc.nextLine(); // 검색할 단어 입력
searchMethod2(doc, word); // 방법 2를 선택한 경우
} else {
System.out.println("잘못된 방법 번호입니다."); // 잘못된 입력 처리
}
}
// 방법 1: 문서를 순회하며 주어진 단어를 찾는 방식
public static void searchMethod1(String doc, String word) {
int cnt = 0; // 단어가 등장하는 횟수를 저장할 변수
int startIndex = 0; // 검색을 시작할 인덱스
while (true) {
int findIndex = doc.indexOf(word, startIndex); // 현재 인덱스부터 단어를 찾음
if (findIndex < 0) { // 더 이상 찾을 수 없으면 반복을 종료
break;
}
cnt++; // 단어를 찾은 경우 카운트 증가
startIndex = findIndex + word.length(); // 찾은 단어 다음 위치부터 다시 검색 시작
}
System.out.println(cnt); // 최종 카운트 출력
}
// 방법 2: 문서에서 단어를 제거한 후 길이 차이를 이용한 계산 방식
public static void searchMethod2(String doc, String word) {
String replaced = doc.replace(word, ""); // 문서에서 단어를 모두 제거
int length = doc.length() - replaced.length(); // 제거 전후의 길이 차이 계산
int count = length / word.length(); // 길이 차이를 이용해 단어의 등장 횟수 계산
System.out.println(count); // 최종 카운트 출력
}
}
반응형
'알고리즘 > 문자열' 카테고리의 다른 글
[백준] 소금 폭탄 (0) | 2024.03.19 |
---|---|
[백준] 단어공부 (0) | 2024.03.19 |
[백준] 애너그램 (1) | 2024.03.19 |
[백준] 대소문자 바꾸기 (1) | 2024.03.19 |