반응형

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


그리디 알고리즘


문제

한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의들에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 최대수의 회의를 찾아라. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다.


입력

첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회의의 정보가 주어지는데 이것은 공백을 사이에 두고 회의의 시작시간과 끝나는 시간이 주어진다. 시작 시간과 끝나는 시간은 231-1보다 작거나 같은 자연수 또는 0이다.



code>>


#include <iostream>

#include <algorithm>

#include <vector>

std::pair<long long, long long> input[100001];

long long time[100001];

bool Compare(const std::pair<long long, long long>& left, const std::pair<long long, long long>& right)

{

if (left.first == right.first)

return left.second < right.second;

else

return left.first < right.first;

}

int main()

{

std::ios::ios_base::sync_with_stdio(false);

int N;

std::cin >> N;

for (int i = 0; i < N; i++)

{

std::pair<long long, long long> p;

std::cin >> p.first >> p.second;

input[i] = p;

}

std::sort(input, input + N, Compare);

auto count = 1;

auto sel = input[0];

for (int i = 1; i < N; i++)

{

if (input[i].first >= sel.second)

{

count++;

sel = input[i];

}

else if(input[i].second <sel.second)

sel = input[i];

}

printf("%d\n", count);

return 0;

}

반응형

'알고리즘 > 백준' 카테고리의 다른 글

2448>별 찍기 - 11  (0) 2018.11.12
4367>셀프 넘버  (0) 2018.10.21
3665>최종순위  (0) 2018.10.20
2252>줄 세우기  (0) 2018.10.15
9095>1,2,3 더하기  (0) 2018.10.15
반응형

그리디 알고리즘


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


 문제

N(1≤N≤100,000)개의 로프가 있다. 이 로프를 이용하여 이런 저런 물체를 들어올릴 수 있다. 각각의 로프는 그 굵기나 길이가 다르기 때문에 들 수 있는 물체의 중량이 서로 다를 수도 있다.


하지만 여러 개의 로프를 병렬로 연결하면 각각의 로프에 걸리는 중량을 나눌 수 있다. k개의 로프를 사용하여 중량이 w인 물체를 들어올릴 때, 각각의 로프에는 모두 고르게 w/k 만큼의 중량이 걸리게 된다.


각 로프들에 대한 정보가 주어졌을 때, 이 로프들을 이용하여 들어올릴 수 있는 물체의 최대 중량을 구해내는 프로그램을 작성하시오. 모든 로프를 사용해야 할 필요는 없으며, 임의로 몇 개의 로프를 골라서 사용해도 된다. 단, 각각의 로프는 한 개씩만 존재한다.


입력

첫째 줄에 정수 N이 주어진다. 다음 N개의 줄에는 각 로프가 버틸 수 있는 최대 중량이 주어진다. 이 값은 10,000을 넘지 않는다.


code>>


#include<vector>

#include<iostream>

#include<algorithm>

int main()

{

int count = 0;

std::cin >> count;

std::vector<int> l;

for(int i=0; i<count; i++)

{

int input = 0;

std::cin >> input;

l.push_back(input);

}

std::sort(l.begin(), l.end());

int max = 0;

for (int i = l.size() - 1; i >= 0; i--)

{

int w = l[i] * (count - i);

max = std::max(max, w);

}

std::cout << max << std::endl;

return 0;

}

반응형

'알고리즘 > 백준' 카테고리의 다른 글

1475>방 번호  (0) 2017.07.01
10250>ACM 호텔  (0) 2017.07.01
2775>부녀회장이 될테야!  (0) 2017.06.30
4673>셀프넘버  (0) 2017.06.30
4307>개미  (0) 2017.06.29

+ Recent posts