https://www.acmicpc.net/problem/1449
<코드>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n,l;
int cnt=1;
cin>>n>>l;
int *list = new int[n];
for(int i=0;i<n;i++)
{
cin>>list[i];
}
sort(list,list+n);
int start = list[0];
for(int i=1;i<n;i++)
{
if(list[i]-start+1>l) //좌우 0.5 간격이기 때문에 +1을 해줌
{
cnt++;
start = list[i];
}
}
cout<<cnt<<'\n';
}
<풀이과정>
i=0에서는 tape를 추가했다고 가정하고 start(시작점)을 list[0]으로 둔다.
i=1 부터는, list[i]-start(시작점)+1(좌우 0.5간격)>L(테이프의 길이)이면 tape의 개수 cnt를 1 증가시켜주면 끝이다.
'PS > 그리디 알고리즘[Greedy]' 카테고리의 다른 글
백준 13164 행복 유치원(c++) (1) | 2022.07.11 |
---|---|
백준 19941 햄버거 분배 (0) | 2022.07.03 |
백준 18310 안테나 (0) | 2022.06.30 |
백준 2812 크게 만들기 (0) | 2022.06.30 |
백준 2012 등수매기기 (0) | 2022.06.30 |