문제 분석
- 사람들은 자신의 위치에서 거리가 K 이하인 햄버거를 먹을 수 있다.
- n : 식탁의 길이
- k : 햄버거를 선택할 수 있는 거리
- 사람은 좌우로 인접한 k개의 거리 이내에 존재하는 햄버거만 먹을 수 있다.
- 햄버거를 먹을 수 있는 사람의 최대 수
풀이
- 최적해
- "햄버거를 먹을 수 있는 최대 사람 수"를 어떻게 구할 수 있을까?
- 왼쪽 사람부터 좌, 우 존재하는 k거리 이내의 햄버거 중 가장 좌측에 있는 것을 먹는 것이 모든 사람이 가장 많은 햄버거를 먹을 수 있는 방법이다.
- 가장 왼쪽의 것을 먹어야 이후의 선택지가 늘어나기 때문
- 풀이
- 사람 p가 발견되면, 좌우 사이의 인접한 k개의 햄버거 탐색
- 햄버거를 발견하면 cnt + 1
- 해당 위치는 먹은 햄버거로 표시
- 즉시 정답으로 사용
- 시간 복잡도
- N명에 대해 K개의 인접한 원소를 탐색해야 한다.
- 따라서 시간 복잡도는 O(n) * O(k)
- n은 최대 20,000개, k는 최대 200,000개
정답 코드
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
table = list(input().strip())
cnt = 0
for i in range(len(table)) :
if table[i] == 'P' :
for j in range(i-k, i+k+1) :
if j < 0 or j >= n : # 범위 넘으면
continue
if table[j] == 'H' :
table[j] = 'eat'
cnt += 1
break
print(cnt)
'코딩 테스트 > 백준' 카테고리의 다른 글
[Python] 백준 2606 바이러스 (0) | 2025.03.11 |
---|---|
[Python] 백준 2579 계단 오르기 (0) | 2025.03.11 |
[Python] 백준 17086 아기 상어 2 (0) | 2025.02.28 |
[Python] 백준 11279 최대 힙 (0) | 2025.02.21 |
[Python] 백준 1182 부분수열의 합 (0) | 2025.02.21 |