


내가 생각했을때 문제에서 원하는부분
식탁의 길이 N, 햄버거 선택할 수 있는 거리 K
첫 줄에 두 정수 N과 K가 있다.
그리고 다음 줄에 사람과 햄버거의 위치가 문자 P(사람)와 H(햄버거)로 이루어지는 길이 N인 문자열로 주어진다.
첫 줄에 햄버거를 먹을 수 있는 최대 사람 수를 나타낸다
내가 이 문제를 보고 생각해본 부분
입력된 정보를 저장한다.
사람이 햄버거를 먹는 최적의 경우를 탐색한다.
햄버거를 먹은 인원을 결과로 출력한다.
코드로 구현
package baekjoon.baekjoon_19;
import java.io.*;
import java.util.StringTokenizer;
// 백준 19941번 문제
public class Main669 {
static char[] info; //식탁 정보 저장 배열
static int answer = 0; //먹은 인원수 저장 변수
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());
info = br.readLine().toCharArray(); //식탁 정보 배열 형태로 저장
//식탁 정보 탐색
for(int i = 0; i < N; i++){
if(info[i] == 'P'){ //사람일 때 먹을 수있는 햄버거 탐색
int index = Math.max(i - K, 0);
boolean check = false;
//먹을 수 있는 햄버거 왼쪽 범위 탐색
//가장 먼저 발견한 햄버거가 범위 왼쪽에 가장 가까운 햄버거!
for(int j = index; j < i; j++){
if(bergerCheck(j)){ //먹을 수 있는 햄버거 발견
check = true;
break;
}
}
//먹을 수 있는 햄버거 오른쪽 범위 탐색
if(!check){
index = i + K >= N ? N-1 : i + K;
for(int j = i + 1; j <= index; j++){
if(bergerCheck(j)) //먹을 수 있는 햄버거 발견
break;
}
}
}
}
bw.write(answer + ""); //햄버거 먹은 인원수 BufferedWriter 저장
bw.flush(); //결과 출력
bw.close();
br.close();
}
//범위 탐색할 때 먹을 수 있는 햄버거인지 확인하는 함수
static boolean bergerCheck(int index){
if(info[index] == 'H'){ //햄버거가 맞을 때
info[index] = 'X'; //햄버거 먹었기 때문에 'X'로 변경
answer++; //먹은 인원수 증가!
return true; //먹기 성공 True
}
return false; //먹기 실패 False
}
}

하루하루 계속 문제를 풀면서 어려웠던 점은 전반적을 어떻게 코드를 작성하고 작되는지 감이 안왔었다 그부분이 조금 어렵게 느껴졌다