[백준] 19941번 햄버거 분배 (Python 파이썬)

쏘쓰·2022년 10월 8일
0

Algorithm

목록 보기
5/7
post-thumbnail

문제

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

위의 상태에서 K=1K = 1인 경우를 생각해보자. 이 경우 모든 사람은 자신과 인접한 햄버거만 먹을 수 있다. 10번의 위치에 있는 사람은 11번 위치에 있는 햄버거를 먹을 수 있다. 이 경우 다음과 같이 최대 5명의 사람이 햄버거를 먹을 수 있다.

2번 위치에 있는 사람: 1번 위치에 있는 햄버거
4번 위치에 있는 사람: 5번 위치에 있는 햄버거
6번 위치에 있는 사람: 7번 위치에 있는 햄버거
9번 위치에 있는 사람: 8번 위치에 있는 햄버거
10번 위치에 있는 사람: 11번 위치에 있는 햄버거
12번 위치에 있는 사람: 먹을 수 있는 햄버거가 없음

K=2K = 2인 경우에는 6명 모두가 햄버거를 먹을 수 있다.

2번 위치에 있는 사람: 1번 위치에 있는 햄버거
4번 위치에 있는 사람: 3번 위치에 있는 햄버거
6번 위치에 있는 사람: 5번 위치에 있는 햄버거
9번 위치에 있는 사람: 7번 위치에 있는 햄버거
10번 위치에 있는 사람: 8번 위치에 있는 햄버거
12번 위치에 있는 사람: 11번 위치에 있는 햄버거

식탁의 길이 NN, 햄버거를 선택할 수 있는 거리 KK, 사람과 햄버거의 위치가 주어졌을 때, 햄버거를 먹을 수 있는 사람의 최대 수를 구하는 프로그램을 작성하시오.

풀이

N, K = map(int, input().split())
location = list(input())
cnt = 0

for i in range(N):
    if location[i] == 'P':
        for j in range(max(i-K, 0), min(i+K+1, N)):
            if location[j] == 'H':
                location[j] = 0
                cnt += 1
                break

print(cnt)

나는 이 문제를 제일 왼쪽에서 부터 햄버거를 먹어치우는 것으로 생각하고 풀었는데,
사람이 앉아있는 곳을 기준으로 K 거리만큼의 좌우 반경에 햄버거가 있다면 그 햄버거를 먹은셈으로 치고 0으로 바꾸어 주었다.

0개의 댓글