※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 24379번 문제인 КИФЛИЧКИ이다.

문제는 아래 링크를 확인하자.

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

 

24379번: КИФЛИЧКИ

Малкият Петър много обича кифлички. В училищната закусвалня има от любимите му с три вида пълнеж – мармалад, шоколад и крем. Тъй като е много

www.acmicpc.net

문제의 상황을 우리말로 서술하면 다음과 같다.

 

BOJ 24379: 소라빵

문제)
꼬마 피터는 소라빵을 좋아합니다. 피터가 다니는 학교의 매점에서는 세 가지 종류의 내용물(마멀레이드, 초콜릿, 크림)이 각각 들어있는 세 종류의 소라빵을 판매합니다. 피터는 매우 배가 고파 살 수 있는 가장 많은 개수의 소라빵을 사려고 합니다. 하지만 매점에 남아있는 소라빵의 개수나 피터의 돈은 무한하지 않습니다.
피터가 최대한 많은 소라빵을 살 수 있게끔 프로그램을 작성해 도와주세요.

입력)
입력은 세 줄로 이루어져 있습니다.
첫 번째 줄에는 세 개의 정수가 사이에 공백을 두고 주어집니다. 각 정수는 순서대로 마멀레이드 소라빵, 초콜릿 소라빵, 크림 소라빵의 가격을 의미합니다.
두 번째 줄에는 세 개의 정수가 사이에 공백을 두고 주어집니다. 각 정수는 순서대로 매점에 남아있는 마멀레이드 소라빵, 초콜릿 소라빵, 크림 소라빵의 수량을 의미합니다.
세 번째 줄에는 피터가 가지고 있는 돈을 나타내는 하나의 정수가 주어집니다.

출력)
한 줄에 피터가 살 수 있는 소라빵의 개수의 최댓값을 출력합니다.

제한)
입력으로 주어지는 모든 정수는 1,000,000,000,000,000,000 보다 작은 음이 아닌 정수입니다.

문제 제한에서 입력으로 0이 들어올 수 있다는 점을 확인하자.

 

가장 저렴한 소라빵서부터 살 수 있는 대로 전부 사는 것을 반복하는 것으로 문제를 해결할 수 있다.

 

문제의 입력으로 들어오는 수의 크기가 매우 크므로, 입력된 두 수를 곱할 때 64비트 정수형으로 표현한 범위를 넘는 경우가 많이 생길 수 있다. 그런 경우 gcc에서 지원하는 자료형인 __int128을 이용하면 편리하게 구현이 가능하다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef __int128 int128;
pair<ll, ll> arr[3];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	for (int i = 0; i < 3; i++) cin >> arr[i].first;
	for (int i = 0; i < 3; i++) cin >> arr[i].second;
	sort(arr, arr + 3);
	ll money; cin >> money;

	ll ans = 0;
	for (int i = 0; i < 3; i++) {
		if ((int128)arr[i].first * (int128)arr[i].second <= (int128)money) {
			money -= arr[i].first * arr[i].second;
			ans += arr[i].second;
		}
		else { // arr[i].first > 0
			ll cnt = money / arr[i].first;
			money -= arr[i].first * cnt;
			ans += cnt;
		}
	}

	cout << ans;
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24075 // C++] 計算 (Calculation)  (0) 2022.02.13
[BOJ 1448 // C++] 삼각형 만들기  (0) 2022.02.12
[BOJ 24377 // C++] ИГРА  (0) 2022.02.11
[BOJ 24378 // C++] КАСТИНГ  (0) 2022.02.11
[BOJ 6443 // C++] 애너그램  (0) 2022.02.10

+ Recent posts