알고리즘/백준
19941번 : 햄버거 분배
코딍코딍
2022. 8. 16. 15:26
https://www.acmicpc.net/problem/19941
19941번: 햄버거 분배
기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사
www.acmicpc.net
문제
코드
import java.io.*;
import java.util.*;
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());
String[] s = br.readLine().split("");
int count=0;
for(int i=0;i<n;i++) {
if(s[i].equals("P")) {
for(int j=Math.max(0,i-k);j<=Math.min(n-1, i+k);j++) {
if(s[j].equals("H")) {
s[j]="O"; count++; break;
}
}
}
}
bw.write(count+""); bw.flush();
}
}
해결방법
이중 반복문을 쓰면 시간 초과가 날 것 같아 다른 방법을 고민해봤는데 딱히 떠오르지 않아서 그냥 이중 반복문을 사용하였다.
단순히 위치가 'P'일 때 선택할 수 있는 거리에 햄버거가 있다면 결과값을 증가시키면 된다.
이때, 'P'를 기준으로 왼편에 있는 햄버거는 가장 먼 햄버거를 택해야하고 오른편에 있는 햄버거는 가장 가까운 햄버거를 택해야 한다. 그래야 햄버거를 먹을 수 있는 최대 사람 수를 구할 수 있다. 이유는 조금만 생각해보면 이해될 것이다.
이를 코드로 구현하면 해결된다. 시간초과가 날 줄 알았는데 통과했다. 다른 사람들의 코드도 보았는데 대부분 이중 반복문을 사용하였다.
햄버거를 택할 때 왼편 먼 곳, 오른편 먼 곳을 택한 다면 아래 테스트 케이스에서 결과가 정상적으로 나오지 않는다.
6 2
PHHHPP
=> 3이 나와야하는데, 2가 나온다.