1. 문제 개요
오늘은 백준 문자열 문제 중에서 단어의 등장 횟수를 세는 문제를 풀었다.
1543번 - 문서 검색
단순히 문자열.contains() 같은 방식이 아니라,
겹치지 않게 몇 번 등장했는지를 세는 게 핵심 포인트였다.
2. 핵심 개념 정리
String.indexOf(String str, int fromIndex) 메서드를 활용해
앞에서부터 단어를 찾고, 찾았으면 그 뒤부터 다시 탐색하는 식으로 구현한다.
int index = 0;
int count = 0;
while (true) {
int found = document.indexOf(word, index);
if (found == -1) break;
count++;
index = found + word.length(); // 겹치지 않게 다음 위치로 이동
}
- indexOf()는 문자열 내에서 특정 문자열의 시작 인덱스를 반환한다.
- 두 번째 인자인 fromIndex부터 탐색을 시작할 수 있어 반복 탐색에 유용하다.
- 문자열 탐색에서 indexOf()는 자주 쓰이는 도구다.
3. 백준 1543번 - 문서 검색
문제 설명
문서와 찾고 싶은 단어가 주어졌을 때,
문서에서 해당 단어가 겹치지 않게 몇 번 등장하는지 출력한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String document = sc.nextLine();
String word = sc.nextLine();
int index = 0;
int count = 0;
while (true) {
int found = document.indexOf(word, index);
if (found == -1) break;
count++;
index = found + word.length();
}
System.out.println(count);
}
}
4. 배운 점 정리
- indexOf()를 이용하면 특정 문자열이 어디서 등장하는지 알 수 있다.
- 두 번째 인자인 fromIndex를 이용하면, 탐색 위치를 점프할 수 있어
겹치지 않게 문자열을 세는 문제에 유용하게 쓸 수 있다. - 단어가 겹치지 않게 몇 번 등장했는지를 세려면, 단순한 반복문이 아니라
문자열 탐색 흐름을 명확히 이해하는 사고방식이 필요하다.
5. 자바 문자열 문제 유형별 핵심 패턴 정리표
유형설명코드 예시
문자 하나씩 순회 | 문자열에서 한 글자씩 꺼내기 | for (int i = 0; i < str.length(); i++) char ch = str.charAt(i); |
알파벳 개수 세기 | a~z 알파벳 등장 횟수 저장 | int[] count = new int[26]; count[ch - 'a']++; |
대소문자 통일 | 대소문자 구분 없이 처리 | str.toUpperCase() 또는 str.toLowerCase() |
문자 → 배열 인덱스 | 문자를 숫자로 변환 | 'a' = 0 → ch - 'a' 'A' = 0 → ch - 'A' |
배열 최댓값 찾기 | 가장 많이 나온 문자 찾기 | if (count[i] > max) { max = count[i]; ... } |
최댓값 중복 처리 | 최댓값 중복 여부 판단 | else if (count[i] == max) result = '?'; |
문자 인덱스 → 문자 | 숫자 → 알파벳 문자 | (char)(i + 'a') 또는 (char)(i + 'A') |
문자 → 숫자 | 문자형 숫자를 정수로 변환 | int num = ch - '0'; |
문자열 공백으로 나누기 | 단어 분리 등 split 사용 | String[] words = str.split(" "); |
배열 출력 | 알파벳 개수 전부 출력 | System.out.print(count[i] + " "); |
문자열 탐색 | 특정 문자열 찾기 | str.indexOf(sub, fromIndex) |
문자열 포함 여부 | 포함 여부만 확인 | str.contains(sub) |
'코딩테스트' 카테고리의 다른 글
[코딩 테스트 문제 풀이 시리즈] 10431번 - 줄세우기: 직접 구현부터 삽입 정렬 개념까지 (2) | 2025.07.27 |
---|---|
자바 배열 문제 풀이 기록 (백준 1236 - 성지키기) (2) | 2025.07.25 |
알고리즘에서 꼭 나오는 시간복잡도 정리 (2) | 2025.07.23 |
자바 문자열 문제 풀이 기록 (백준 13223, 11718, 11654, 2525) (4) | 2025.07.23 |
자바 문자열 문제 풀이 기록 (백준 10808, 1157) (2) | 2025.07.21 |