🧫 문제 분석
✔️ 출처
📖 문제

앞의 사람이 가장 왼쪽 즉, 거리가 먼 것 부터 먹어줘야 뒤에 사람이 선택지가 늘어난다.
따라서 앞의 사람이 현재 위치-k ~ 현재 위치 + k 까지 탐색해서 앞쪽에 있는 아직 안먹은 햄버거가 있다면 먹는다.
쉬운 문제인데 이런 유형을 까먹을까봐 기록함으로써 이해한다.
🔅 문제 풀이
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
boolean[] eatCheck = new boolean[n];
char[] tables = br.readLine().toCharArray();
ArrayList<Integer> people = new ArrayList<>();
// 사람의 인덱스를 저장
for (int i = 0; i < n; i++) {
if (tables[i] == 'P') {
people.add(i);
}
}
int cnt = 0;
for (int idx : people) {
for (int i = idx - k; i <= idx + k; i++) {
if (i < 0 || i >= n) continue;
// 햄버거이고 아직 안먹었다면 먹음 처리
if (tables[i] == 'H' && !eatCheck[i]) {
eatCheck[i] = true;
cnt++;
break;
}
}
}
bw.write(cnt+ "");
bw.flush();
bw.close();
}
}
❗ 오답노트 / 필요한 지식
'baekjoon > Greedy' 카테고리의 다른 글
백준 30805번 : 사전 순 최대 공통 부분 수열 [자바] (0) | 2025.04.09 |
---|---|
백준 1034번 : 램프 [자바] (0) | 2025.03.19 |
백준 13305번 : 주유소 [자바] (0) | 2025.03.10 |
백준 20207번 : 달력 [자바] (1) | 2025.02.03 |
백준 1541번 : 잃어버린 괄호 자바 (0) | 2024.08.26 |