`이것이 코딩 테스트다 (나동빈)` 커리큘럼에 따라 진행합니다
✨ 그리디 알고리즘 (탐욕법)
개념
- 현재 상황에서 지금 당장 좋은 것만 고르는 방법
- 대표적인 알고리즘으로는 "거스름돈" 문제가 있다
- 항상 최적의 값을 보장하는 것은 아니지만 코딩테스트에서 출제하는 문제는 최적의 해를 보장하는 경우로 출제된다
문제
1543번: 문서 검색
세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한
www.acmicpc.net
- 첫째 줄이 문서, 둘째 줄이 검색하고 싶은 단어이다.
- 검색하고 싶은 단어가 문서에 몇 개나 있는지 세는 프로그램이다
- 그리디 알고리즘이 사용된 건지는 잘 모르겠다
✨ 풀이 - Java
import java.io.*;
import java.util.StringTokenizer;
public class BOJ_1543 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String findStr = br.readLine();
String str = br.readLine();
int size = str.length(); // 주어진 단어의 길이
int count = 0; // 단어 개수
// 중복 방지를 위해 str의 길이만큼 !로 치환
// ex) abababab -> !!!b!!!b
findStr = findStr.replace(str, "!".repeat(str.length()));
for (int i=0; i<findStr.length(); i++) {
if (findStr.charAt(i) == '!')
count += 1;
}
// !의 개수 / 단어 길이
System.out.println(count/size);
}
}
- 중복 방지를 위해 str의 길이만큼 !로 치환했다
- ex) abababab -> !!!b!!!b
- str이 찾고자 하는 단어이기 때문에 replace() 를 활용해 문서에서 str이 있는 곳을 str의 길이만큼 !로 치환해줬다.
- !의 개수 / 단어의 길이를 함으로써 몇 번 단어가 나왔는지 값을 출력했다
- BufferedWriter은 쓰지 않았는데... 지우는 걸 깜빡했다
✨ 참고 자료
https://jellili.tistory.com/23
'Algorithm > 개념 & 문법' 카테고리의 다른 글
[Algorithm] DFS & BFS 알고리즘 (0) | 2024.02.04 |
---|---|
[Algorithm] 재귀 함수 (2) | 2024.01.30 |
[Algorithm] 스택과 큐 자료구조 (0) | 2024.01.18 |
[Algorithm] 구현 (1) | 2024.01.12 |
[Algorithm] 출력 (2) | 2024.01.02 |