본문 바로가기

개발/백준

[백준] 1449번. 수리공 항승 (C++)

문제설명

그리디 알고리즘

https://www.acmicpc.net/problem/1449

 

1449번: 수리공 항승

첫째 줄에 물이 새는 곳의 개수 N과 테이프의 길이 L이 주어진다. 둘째 줄에는 물이 새는 곳의 위치가 주어진다. N과 L은 1,000보다 작거나 같은 자연수이고, 물이 새는 곳의 위치는 1,000보다 작거나

www.acmicpc.net

 

해결방법

startPos 는 테이프를 붙이는 시작점

lastPos 는 테이프를 붙였을 경우 테이프의 마지막 끝 부분의 위치

다음 구멍이 lastPos보다 작은 값이라면 테이프에 가려진 것이다.

다음 구멍이 lastPos보다  큰 값이라면 테이프에 가려지지 못한것이다.

이 경우 새로운 테이프를 붙여야 하므로

startPos와 lastPos값을 갱신한다.

 

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int main() 
{
	//INPUT
	int N, L;
	cin >> N >> L;

	vector <float> leak(N);
	for (int i = 0; i < N; i++) { cin >> leak[i]; }
	sort(leak.begin(),leak.end());


	//SEARCH
	int count = 1;
	float startPos = leak[0] - 0.5;
	float lastPos = startPos + L;


	for (int i = 0; i < N; i++)
	{
		if(leak[i] > lastPos)
		{
			startPos = leak[i] - 0.5;
			lastPos = startPos + L;
			
			count++;
		}
	}

	cout << count;

}

'개발 > 백준' 카테고리의 다른 글

[백준] 19941번. 햄버거 분배  (1) 2023.12.26
[백준] 18310번. 안테나 (C++)  (0) 2023.12.26
[백준] 13305번. 주유소 (C++)  (1) 2023.12.20
[백준] 10451번. 순열 사이클 (C++)  (0) 2023.07.19
[백준] 2745번. 진법 변환 (C++)  (0) 2023.06.27