링크
https://www.acmicpc.net/problem/19941
19941번: 햄버거 분배
기다란 벤치 모양의 식탁에 사람들과 햄버거가 아래와 같이 단위 간격으로 놓여 있다. 사람들은 자신의 위치에서 거리가 $K$ 이하인 햄버거를 먹을 수 있다. 햄버거 사람 햄버거 사람 햄버거 사
www.acmicpc.net
문제
입출력 예제
코드
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <map>
#include <cmath>
using namespace std;
int main(void)
{
string str;
int answer = 0;
int n, k;
cin >> n >> k;
cin >> str;
for (int i = 0; i < str.size(); i++)
{
if (str[i] == 'P')
{
for (int j = i - k; j <= i + k; j++)
{
if (j < 0 || j >= n) continue;
if (str[j] == 'H')
{
answer++;
str[j] = 0;
break;
}
}
}
}
cout << answer;
}
풀이
- 그리디 알고리즘을 사용하였다.
- k만큼 떨어진 햄버거를 먹을 수 있으니 기준이 되는 사람을 i로 가정하면 i-k 부터 i+k 까지
for문을 반복한다. - 인덱스를 벗어나면 메모리 오류가 발생하니 j<0 || j>=n 의 조건에서 continue하여 예외처리한다.
- H가 발견되면 answer를 1 올리고 해당 인덱스의 문자를 0으로 바꿔서 다시한번 방문했을 때 햄버거로
인식하지 못하게 한다.
'[게임 개발] 알고리즘 공부 > 백준' 카테고리의 다른 글
[C++] 20186번: 수 고르기 (0) | 2023.07.16 |
---|---|
[C++] 20115번: 에너지 드링크 (0) | 2023.07.15 |
[C++] 13305번: 주유소 (0) | 2023.07.14 |
[C++] 2012번: 등수 매기기 (0) | 2023.07.14 |
[C++] 11399번: ATM (0) | 2023.07.13 |