꾸물꾸물 졔의 개발공부
[백준] 1543 문서 검색 - JAVA 본문
1543번: 문서 검색
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한
www.acmicpc.net
알고리즘
주어진 문서에 찾으려는 단어가 중복없이 몇번 들어가있는지 확인하는 문제. 문서와 단어 모두 String 형이기 때문에 문자열 함수를 적절히 잘 활용하면 아주 쉽게 풀 수 있는 문제였다.
문서에서 찾으려는 단어가 있을경우, count를 세고 해당 단어 이후부터의 문자열을 다시 탐색한다.
ex ) ababababa 에서 aba 첫번 째 탐색 후, 해당 단어 이후부터인 bababa 를 탐색한다.
✔️사용한 String 함수
contains() : 대상 문자열에 특정 문자열이 포함되어있는지 확인
indexOf() : 대상 문자열에서 특정 문자열이 처음으로 발견되는 위치의 인덱스 반환
substring(int startIndex) : startIndex 부터 끝까지의 문자열을 잘라내서 리턴
구현 알고리즘
1. 문서와 찾으려는 단어를 입력받는다. 단, Scanner 사용시 nextLine() 사용해야한다. next()로 하면 문서나 단어에 공백이 있을 경우 제대로 입력 안됨
2. 전체 문서의 길이가 0이상일 경우 동안 아래의 과정을 반복한다. ( 단어를 찾을경우, 해당 위치를 기준으로 문서를 자르기 때문에 0보다 작아질 수도 있음 )
- IF, 문서가 찾으려는 단어를 포함하고 있을 경우, count 를 세고 해당 단어까지의 문자열을 잘라낸다. 중복없이 찾아야 하기 때문에 !
- indexOf(단어) + 단어의길이 = 단어가 시작된 위치 + 단어의 길이 == 즉, 단어의 바로 다음 위치
- ELSE, 찾으려는 단어를 포함하고 있지 않다면 break
3. count 출력
소스 코드
import java.util.*;
public class Solution_BaekJoon_1543 {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
String docu= sc.nextLine(); //문서
String word= sc.nextLine(); //찾으려는 단어
int count=0;
while(docu.length()>0) {
if(docu.contains(word)) {
count++;
int next = docu.indexOf(word) + word.length();
//가장 앞에 있었던 word까지 제외
docu = docu.substring(next);
}
else break;
}
System.out.println(count);
}//end of main
}
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2473 세 용액 - JAVA (0) | 2023.03.27 |
---|---|
[백준] 12100 2048(Easy) - JAVA (0) | 2023.03.24 |
[백준] 2470 두 용액 - JAVA (0) | 2023.03.22 |
[백준] 1541 잃어버린 괄호 - JAVA (0) | 2023.03.22 |
[백준] 16234 인구 이동 - JAVA (0) | 2023.03.17 |