코딩테스트/BOJ

[BOJ] 19941 햄버거 분배 - JAVA

5월._. 2023. 7. 26.
728x90

1. 문제

 

19941번: 햄버거 분배

기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사

www.acmicpc.net


2. 풀이

N 최대가 2만, K 최대가 10이라 N*K = 20만 번 탐색하면 된다.

1.  하나씩 탐색하되, 사람이 아니면 넘긴다.

2.  i번 사람 기준으로 i-K부터 i+K까지 전부 탐색하면서 햄버거가 있다면 answer+1하고 그 자리의 햄버거를 _로 바꿔서 다먹었다는 표시를 한다. 햄버거 하나를 먹었다면 i번 사람 탐색을 마친다.

3.  답을 출력한다.

import java.io.*;
import java.util.*;

public class BOJ_19941_햄버거분배 {
   public static void main(String[] args) throws IOException {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      StringTokenizer st = new StringTokenizer(in.readLine());
      int N = Integer.parseInt(st.nextToken());
      int K = Integer.parseInt(st.nextToken());
      char[] input = in.readLine().toCharArray();
      int answer = 0;
      for(int i=0;i<N;i++){
         if(input[i]!='P') continue;
         for(int j=Math.max(i-K,0);j<=Math.min(i+K,N-1);j++){
            if(input[j]!='H') continue;
            input[j] = '_';
            answer++;
            break;
         }
      }
      System.out.println(answer);
   }
}

3. 결과

댓글