PS/그리디 알고리즘[Greedy]

백준 13164 행복 유치원(c++)

SeungbeomKim 2022. 7. 11. 17:44

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

 

13164번: 행복 유치원

행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로

www.acmicpc.net

<코드>

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

int main()
{
	int n,k;
	cin>>n>>k;
	vector<int>v;
	for(int i=0;i<n;i++)
	{
		int a;
		cin>>a;
		v.push_back(a);
	}
	vector<int>cost;
	for(int i=1;i<v.size();i++){
		cost.push_back(v[i]-v[i-1]);
	}
	sort(cost.begin(),cost.end());
	int sum = 0;
	int cnt=0;
	for(int i=0;i<n-k;i++)
	{
		sum += cost[i];
		
	}
	cout<<sum<<'\n';
	
	
}

<풀이과정>

n=5 k=3 배열 2 5 6 7 8이라고 가정

비용의 합이 최소가 되기위해서 우선적으로 비용 벡터 cost에 각각의 비용 v[i]-v[i-1]을 저장한다.

저장한 후           2 5 6 7 8

   차이 v[i]-v[i-1]   3 1 1 1 중 가장 작은 것을 두 개(n-k) 선택하면 된다.

즉 1 두개를 선택하면 비용의 합의 최소값은 2가 된다.

2 / 5 6 / 7 8 로 나눠도 되고  2 / 5 6 7 / 8로 나눠도 비용의 합의 최솟값은 2가 된다. 

'PS > 그리디 알고리즘[Greedy]' 카테고리의 다른 글

백준 4889 안정적인 문자열(c++)  (0) 2022.07.17
백준 1758 알바생(c++)  (0) 2022.07.17
백준 19941 햄버거 분배  (0) 2022.07.03
백준 1449 수리공 항승  (0) 2022.07.01
백준 18310 안테나  (0) 2022.06.30