✏️ 문제
문제 파악
일단 'H'를 기준, 경우의 수를 3가지로 나눴다.
- H의 위치가 K보다 작을 경우: H를 기준으로 좌로 K만큼 비교할 때 배열 범위를 벗어난다.
- H의 위치가 K보다 크고 N-K보다 작을 경우: H를 기준으로 좌우로 K만큼 비교할 수 있다.
- H의 위치가 N-K 크거나 같을 경우: H를 기준으로 우로 K만큼 비교할 때 배열 범위를 벗어난다.
이때 i-k가 0보다 작으면, i+k가 n보다 크면 배열 범위를 벗어나므로 처리를 해주어야 한다!
알고리즘
- 그리디 알고리즘
코드
n, k = map(int, input().split())
ary = list(map(str, input()))
start = 0
end = 0
for i in range(len(ary)):
if ary[i] == 'H':
if i < k:
end = i+k+1
elif n - k <= i:
start = i-k
end = n
else:
start = i-k
end = i+k+1
if start < 0:
start = 0
if end > n:
end = n
for j in range(start, end):
if ary[j] == 'P':
ary[i] = ''
ary[j] = ''
break
print(int(ary.count('') / 2))
'PS > 백준' 카테고리의 다른 글
[Python] 1969번 DNA (0) | 2024.07.19 |
---|---|
[Python] 2828번 사과 담기 게임 (0) | 2024.07.19 |
[Python] 2012번 등수 매기기 (0) | 2024.07.19 |
[Python] 15904번 UCPC는 무엇의 약자일까? (2) | 2024.07.19 |
[Python] 16435번 스네이크버드 (0) | 2024.07.17 |