본문 바로가기
알고리즘/구름

[ 구름 / 구현 ] 사은품 교환 풀이

by 뎁꼼 2020. 6. 26.

1. 문제


 

 

구름LEVEL

코딩테스트에서 가장 높은 비중을 차지하는 알고리즘 문제를 제작하고 풀이할 수 있는 온라인 저지 서비스입니다. 기업에서 선호하는 C, C++, 파이썬(Python), 자바(Java), 자바스크립트(Javascript) 이��

level.goorm.io

 

 

2. 소스코드


- 단순 구현 문제.

 

- 알고리즘

1) n과 m이 각각 5와 7로 나누고 최소값을 정답에 더한다.

2) m이 1이상인 경우, m을 모두 사용한다.

3) n을 모두 사용한다.

 

- 주의점

1) 나누기를 사용하지 않으면 반드시 시간 초과가 난다. n, m은 64bit long long 정수이다.

2) n, m을 int로 선언하면, 오버 플로우 때문에 정답을 구할 수 없다.

3) 정답을 담는 변수가 있다면 이것도 long long 으로 선언해야한다. 이유는 2)와 동일.

 

소스코드

#include <iostream>

using namespace std;

int T;
long long int n, m;

int main() {
	cin >> T;
	while (T--) {

		long long int ans = 0;
		cin >> n >> m;
		ans = n / 5 <= m / 7 ? n / 5 : m / 7;
		if (ans) n -= 5 * ans, m -= 7 * ans;
		
		if (n >= 5 and m > 0 and n + m >= 12) {
			n -= 12 - m, m = 0;
			ans++;
		}
		if (n >= 12) 
			ans += n / 12;

		cout << ans << '\n';
	}
	return 0;
}