거의 알고리즘 일기장

codeforces_ 158B_ Taxi 본문

알고리즘 문제풀이

codeforces_ 158B_ Taxi

건우권 2020. 5. 2. 15:17

https://codeforces.com/problemset/problem/158/B

 

Problem - 158B - Codeforces

 

codeforces.com

풀이방법

1. 4명, 3명, 2명인 그룹을 먼저 태운다

ans = numOfGroup[4] + numOfGroup[3] + numOfGroup[2]/2;

 

2. 1명인 그룹, 2명인 그룹을 위에 맞춰 끼워탄다. ( 1번은 3번에 2번은 2번끼리 )

numOfGroup[1] -= numOfGroup[3];
numOfGroup[2] -= (numOfGroup[2] / 2)*2;

 

3. 2명인 그룹, 1명인 그룹이 남았으면 그에 맞춰 계산한다.

if (numOfGroup[2] > 0)
{
	ans += 1;
	numOfGroup[1] -= 2;
}
if (numOfGroup[1] > 0)	
{
	ans += (numOfGroup[1] / 4);
	if (numOfGroup[1] % 4 != 0)
		ans += 1;
}

전체코드

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int numOfGroup[5];

int main()
{
	int n;
	cin >> n;
	int value, ans = 0;
	for (int i = 0; i < n; i++)
	{
		cin >> value;
		numOfGroup[value]++;
	}

	ans = numOfGroup[4] + numOfGroup[3] + numOfGroup[2]/2;
	
	numOfGroup[1] -= numOfGroup[3];
	numOfGroup[2] -= (numOfGroup[2] / 2)*2;

	if (numOfGroup[2] > 0)
	{
		ans += 1;
		numOfGroup[1] -= 2;
	}
	if (numOfGroup[1] > 0)
	{
		ans += (numOfGroup[1] / 4);
		if (numOfGroup[1] % 4 != 0)
			ans += 1;
	}

	cout << ans;
	return 0;
}

후기

아무리 쉬운 영어 지문이라도 조건 하나하나 꼼꼼하게 읽기가 쉽지않다.ㅠ

반응형

'알고리즘 문제풀이' 카테고리의 다른 글

백준 2293번 _ 동전 1  (0) 2020.05.03
백준 11657번 _ 타임머신  (0) 2020.05.03
백준 15683번_ 감시  (0) 2020.05.01
백준 14891번 _ 톱니바퀴  (0) 2020.04.30
백준 14890번_경사로  (0) 2020.04.30
Comments