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 |