Link https://www.acmicpc.net/problem/2875
소스결과 1984 KB / 0 ms
출처 Backjoon, COCI 2010/2011 Contest #1 1번
언어 C++ 17
분류 그리디 알고리즘
설명
백준대학교에서는 총장님의 권력이 막강해 2명의 여학생과 1명의 남학생이 팀을 결성해서 나가는데 올해는 인턴십 때문에 사람을 빼야한다.
최대한 사람좀 많이 남겨보라는 총장님의 지시를 이행하는 문제
최대가 100번이기에 반복문을 사용해도 괜찮다.
생각을 그대로 옮기면 되는 문제. 잉여 인원을 먼저 인턴십에 다 보낸 후, 동시에 2명씩 줄여나가면 되는 문제다.
여러 경우로 나눠서 nested-if 문을 사용해 풀어보려 했으나 생각보다 코드가 길어져서 while문을 통해 반복 하는 형태로 구현했다.
알고리즘
1. n 과 m * 2 의 관계를 통해 n을 1씩 감소시키거나 m을 1씩 감소 시킨다.
2. 1번 알고리즘을 k가 0이 될 때 까지 반복한다.
3. n / 2가 m 보다 작을 경우 결과값을 n / 2로 설정한다.
4. m을 결과값으로 출력한다.
소스코드
#include <iostream>
using namespace std;
int main()
{
int n, m, k;
cin >> n >> m >> k;
for (;k > 0; k--)
{
if (n >= (m * 2))
n--;
else if (n < (m * 2))
m--;
}
if ((n / 2) < m)
m = n / 2;
cout << m;
return 0;
}
'Algorithm > Greedy Algorithm' 카테고리의 다른 글
Baekjoon 1541 잃어버린 괄호 (0) | 2019.03.08 |
---|---|
Baekjoon 1049 기타줄 (0) | 2019.01.16 |
BaekJoon 10610 30 (0) | 2019.01.16 |
BaekJoon 11047 동전 0 (0) | 2019.01.16 |
BaekJoon 11399 ATM (0) | 2019.01.16 |