맞는데 왜 틀릴까..?

알고리즘 문제/그리디

[Java] 그리디 (햄버거 분배)

안도일 2023. 2. 19. 19:38

https://www.acmicpc.net/problem/19941

 

19941번: 햄버거 분배

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

www.acmicpc.net

 

햄버거 하니까 군 시절에 동기가 행보관님을 햄버거한입으로 저장해 놓은 거 걸려서 엄청 털렸던 기억이 나네요.

 

전형적인 그리디 문제.

가능한 왼쪽부터 먹는 방법으로 O(N*K)로 풀 수 있다.

 

String 배열 array에 입력을 저장하고 반복문을 돌려 해당 위치에 사람이 있다면 그다음 반복문을 실행한다.

 

2차 반복문의 범위는 해당 위치에서 +-K 로 제한. OutOfIndex 오류가 날 수 있기 때문에 조건문을 걸어 방지해 주자.

만약 해당 범위에 햄버거가 있다면 먹었다는 의미로 문자를 E로 교체해 주자.

 

 

 

public class Main {

    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int N, K, count=0;
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        K = Integer.parseInt(st.nextToken());

        String[] array = br.readLine().split("");

        for(int i=0; i<N; i++){
            if(array[i].equals("H") || array[i].equals("E")) continue;

            for(int j=(i-K); j<(i+K+1); j++){
                if(j>N-1 || j<0) continue;

                if(array[j].equals("H")){
                    array[j] = "E";
                    count++;
                    break;
                }
            }
        }

        System.out.println(count);
    }
}

'알고리즘 문제 > 그리디' 카테고리의 다른 글

[Java] 그리디 - 최댓값 갱신 (주식)  (0) 2023.02.11
그리디 (주사위)  (0) 2022.03.18
그리디 (신입 사원)  (0) 2022.02.14
그리디 (멀티탭 스케줄링)  (0) 2022.01.29