https://www.acmicpc.net/problem/13702
13702번: 이상한 술집
프로그래밍 대회 전날, 은상과 친구들은 이상한 술집에 모였다. 이 술집에서 막걸리를 시키면 주전자의 용량은 똑같았으나 안에 들어 있는 막걸리 용량은 랜덤이다. 즉 한 번 주문에 막걸리 용
www.acmicpc.net
문제 요약
주전자 용량은 동일하나 막걸리 용량은 랜덤.
막걸리 N 주전자를 주문하고, 친구들 K명에게 막걸리를 동일한 양으로 나눠준다. (주전자 속 남은 막걸리는 그냥 버린다.)
최대한
범위
- 막걸리 주전자 개수 N (<=10,000)
- 은상 + 친구의 수 M (<=1,000,000)
- 막걸리 용량 (<= 1,000,000,000 자연수 혹은 0)
예시
주전자 3개(N) (1002, 802, 705ml)를 주문하고 401ml(최대 ml)로 동일하게 나눴을 때, 5명(M) 모두 마실 수 있다.
M명 모두에게 최대한 많은/동일한 양의 막걸리를 주고싶다.
최대한 많은 양의 막걸리가 ML 일 때, M명이 마실 수 있는가?
여기서 주의할 점은 데이터 타입이다! 범위를 다시 살펴보면,
N은 최대 10,000 / M은 최대 1,000,000 / 막걸리 용량은 최대 약 1,000,000,000(2^31 -1)
모든 입력이 최대라고 생각해보자.
만약 주전자 10,000개가 있는데, 각 주전자 속의 막걸리 용량이 모두 1,000,000,000ml 일때, 인원수가 1명이라면?
막걸리 양의 최댓값은? 1,000,000,000 x 10,000 = 10,000,000,000,000 ml
→ int 형은 안된다. (-2,147,483,648 ~ 2,147,483,647)
→ long long 형을 사용했다. (-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807)
//13702번: 이상한 술집
#include <iostream>
#include <algorithm>
typedef long long ll;
using namespace std;
int n, m, x[10002];
void input(){
cin >> n >> m;
for(int i=0; i<n; i++) {
cin >> x[i];
}
}
bool calc(ll ML){
if(ML == 0) return false; //0으로 나눌 수 없기 때문에 미리 없애기
ll sum = 0;
for(int i=0; i<n; i++){
sum += x[i] / ML;
}
return sum >= m;
}
void solution(){
ll L = 0, R = 10000000000000, ans = 0;
while(L <= R){
ll mid = (L+R)/2;
if(calc(mid)){
ans = mid;
L = mid + 1;
}else{
R = mid - 1;
}
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(0); cout.tie(0); cin.tie(0);
input();
solution();
return 0;
}
long long int 란?
💡long long
long long 은 int형 연산에서 초과되는 범위를 다룰 때 사용한다.
Type | Byte | Range |
(signed)int | 4 | -2,147,483,648 ~ 2,147,483,647 |
char | 1 | -128 ~ 127 |
short, short int | 2 | -32,768 ~ 32,767 |
long long | 8 | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
bool | 1 | true or false |
float | 4 | 3.4E+/-38(7개의 자릿수) |
double | 8 | 1.7E+/-308(15개의 자릿수) |
💡long long 과 long long int 의 차이점은?
동일한 타입이다. 차이점이 있다면 Specifier와 Type으로 나눌 수 있다는 것이다.
Specifier와 Type 간의 차이를 보자면, Specifier는 컴파일러에게 유형이 무엇인지 알려주는 방법이지만 같은 타입으로 다른 Specifier를 사용할 수 있다.
💡공부 및 기록용 블로그이므로 오류가 있을 수 있습니다. 만약 문제에 오류나 오타가 있다면 댓글로 알려주세요➿
언제나 환영합니다. 감사합니다. 화이팅!☃️
'알고리즘 > 백준' 카테고리의 다른 글
[c++] 5635번: 생일 (0) | 2022.01.14 |
---|---|
[c++] 1940번: 주몽 (0) | 2022.01.14 |
[c++] 17266번: 어두운 굴다리 (0) | 2022.01.13 |
[c++] 6236번: 용돈 관리 (0) | 2022.01.13 |
[c++] 2343번: 기타 레슨 (0) | 2022.01.13 |