[BOJ][실3][1449] 수리공 항승
문제 링크
첫 번째 풀이 : 그리디
알고리즘
물이 세는 곳이 1,2,3이고 테이프 길이가 1일 때 각 지점에 1개씩 3개가 필요합니다. 테이프 길이가 2일 때는 1에서부터 붙히면 1,2는 커버되고 3은 새롭게 하나 붙여야 합니다.
붙이기 시작하는 지점을 start라고할 때, start+L-1만큼 커버할 수 있습니다. 테이프를 어디서 붙이기 시작했는지 start에 저장해두고, 새롭게 테이프를 붙여야할 때마다 start를 갱신합니다.
정답코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int MAX = 1010;
int n, m, k;
int arr[MAX];
int main()
{
//freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(0); cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr, arr + n);
int ans = 1;
int start = arr[0];
for (int i = 1; i < n; i++) {
int cover = start + m - 1;
if (cover < arr[i]) start = arr[i], ans++;
}
cout << ans;
return 0;
}
Success Notice: 수고하셨습니다.
Leave a comment