[백준(BOJ)] 햄버거 분배(19941번)_C++
2024. 4. 25. 20:11ㆍProblem Solving/Greedy & 구현
728x90
반응형
SMALL
그렇게 어렵지는 않은 문제였다.
자신의 사정거리안에 먹을 수 있는 햄버거있는지 판단하는 문제다.
주어진 문자열을 탐색할 때 어디서부터 탐색하는지가 중요하다.
만일 왼쪽부터 탐색한다면 가장 왼쪽에 있는 햄버거는 가장 왼쪽에 있는 사람이 차지하는 방식으로 구현해야한다.
당연한 말처럼 들리겠지만 최적의 해를 구하는 방법이 이 방법이다.
즉, 임의의 사람이 먹을 수 있는 햄버거를 탐색할 때 이또한 왼쪽에서부터 탐색해야 한다는 이야기이다.
시간복잡도는 O(n*(2*k + 1))이므로 최악의 경우 20000*21이다.
시간제한을 통과하기 충분하다.
정답 코드
#include <iostream>
using namespace std;
int n, k, answer;
string s;
bool eat[20100];
int main(){
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> k >> s;
s = "0000000000" + s + "0000000000";
for (int i = 10; i < n + 10; i++){
if (s[i] == 'P'){
for (int j = i - k; j <= i + k; j++){
if (s[j] == 'H' && eat[j] == false){
eat[j] = true;
answer++;
break;
}
}
}
}
cout << answer;
}728x90
반응형
LIST
'Problem Solving > Greedy & 구현' 카테고리의 다른 글
| [백준(BOJ)] KCPC(3758번)_C++ (0) | 2024.05.01 |
|---|---|
| [백준(BOJ)] 비슷한 단어(2607번)_C++ (0) | 2024.04.30 |
| [백준(BOJ)] 어두운 굴다리(17266번)_C++ (0) | 2024.03.23 |
| [백준(BOJ)] 크로스 컨트리(9017번)_C++ (0) | 2024.03.20 |
| [백준(BOJ)] 스위치 켜고 끄기(1244번)_C++ (0) | 2024.03.19 |