Mini
[틀림] 백준 1561 놀이공원 // 매개변수탐색, ret-1 추가탐색 본문
https://www.acmicpc.net/problem/1561
* 풀이
- 처음보는 형태의 문제
- ret 값을 찾은후, 추가 계산이 필요하다.
- 왜냐면 , 찾은 ret 값은 n명 이상을 태울수있는 최소시간이다.
- 딱 n명을 태우는 시간이 아니다.
- n<=m일때 예외처리 필요
- ret를 찾고, ret-1분에서 탄사람수 계산
- ret분에서 놀이기구를 순회하면서 정확히 n번째 사람 찾기
* 전체코드
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ret, n,m;
ll a[10000+4];
int go(ll x) {
ll temp=m; // 시작하자마자 m 명 태우고 시작
// temp : 태운사람수
for(int i=0;i<m;++i) {
temp+=x/a[i];
}
return temp >=n;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
cin>>n>>m;
for(int i=0;i<m;++i) {
cin>>a[i];
}
if(n<=m) {
cout<<n;
return 0;
}
ll st=1;
ll en=6000000000+4;
en = 60000000004;
while(st<=en) {
ll mid = (st+en)/2;
if(go(mid)) {
ret=mid;
en=mid-1;
}
else {
st=mid+1;
}
}
// ret : n명 이상을 태울수 있는 최소시간 , 정확히 n 명이 아님!!
// cout<<ret;
// ret-1 분까지 실제 몇명이 탔는지 계산
// temp : 탄 사람수
ll temp=m;
for(int i=0;i<m;++i) {
temp+=(ret-1)/a[i];
}
// ret 시간을 자세히 조사
for(int i=0;i<m;++i) {
// 주기가 맞아야 사람을 태울수 있음
if(ret%a[i]==0) {
temp++;
}
// n번째 사람을 태웠으면 놀이기구 번호 출력
if(temp==n) {
cout<<i+1;
return 0;
}
}
}
'Algorithm > 매개변수 탐색' 카테고리의 다른 글
[틀림] 프로그래머스 징검다리 건너기 // 매개변수 탐색 (0) | 2025.05.02 |
---|---|
[틀림] 프로그래머스 징검다리 // 매개변수 탐색 (0) | 2025.03.20 |
[틀림] 백준 14627 파닭파닭 // 매개변수탐색, 나머지 구하기 (0) | 2025.03.10 |
[맞음] 백준 16434 드래곤앤던전 // 매개변수 탐색, long long, 선빵 (0) | 2025.03.10 |
[세모] 백준 6236 용돈관리 // 매개변수 탐색 (0) | 2025.03.07 |