728x90
    
    
  
문제의 힌트를 보면 잘 이해가 되지 않는다. 상식적으로 웅덩이를 덮을때 시작점에 딱 맞춰서 널빤지를 붙이면 최적이다.

힌트를 보면 웅덩이는 1에서 시작하는데 널빤지를 0에서 부터 붙이기 시작하여 사실상 힌트 오류라고 할수 있다.
실제 맞는 예시는 다음과 같다.
.111222.333444555
.MMMMM..MMMM.MMMM
풀이 방법은 각 웅덩이 위치를 백터 v에 넣어 정렬한 후 각 웅덩이 마다 깔수 있는 널빤지를 구해주면 된다.
핵심은 널빤지가 다른 웅덩이를 일부 덮는다면 거기서부터 계속 붙여나가고, 그렇지 않고 널빤지의 끝이 일반 땅이라면 그다음 웅덩이부터 다시 붙여나가면 된다.
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n, l;
	cin >> n >> l;
	vector<pair<long long, long long>> v;
	
	for(int i = 0; i < n; i++)
	{
		long long s, e;
		cin >> s >> e;
		v.push_back({ s,e });
	}
	sort(v.begin(), v.end());
	long long cur = 0;
	int cnt = 0;
	for(int i = 0; i < v.size(); i++)
	{
		if(cur >= v[i].first && cur < v[i].second)
		{
			int quotient = (v[i].second - cur) / l;
			int remainder = (v[i].second - cur) % l;
			cnt += quotient;
			cur += quotient * l;
			if(remainder != 0)
			{
				cnt++;
				cur += l;
			}
		}
		else if(cur< v[i].first)
		{
			cur = v[i].first;
			i--;
		}
	}
	cout << cnt;
}반응형
    
    
    
  '알고리즘 > boj' 카테고리의 다른 글
| BOJ 10165 버스 노선 (0) | 2023.01.18 | 
|---|---|
| BOJ 1459 걷기 (0) | 2023.01.17 | 
| BOJ 1016 제곱 ㄴㄴ 수 (0) | 2023.01.17 | 
| BOJ 1439 뒤집기 (0) | 2023.01.14 | 
| BOJ 1789 수들의 합 (0) | 2023.01.13 |