728x90
https://school.programmers.co.kr/learn/courses/30/lessons/43238
풀다가 감을 못잡겠어서 답을 봐버렸다..😭
참고 코드: https://school.programmers.co.kr/learn/courses/30/lessons/43238/solution_groups
참고 설명:
https://school.programmers.co.kr/questions/17225
흐름
팁
- 최소 시간을 구해라 => 시간에 대해 l,r을 정하라.
- 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성 => n명일때가 기준
- 7분, 10분일 경우 2가지 케이스가 있기때문에 반복문으로 작성해라.
코드
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll solution(int n, vector<int> times) {
ll maxtime=0;
for(int i=0;i<times.size();i++){
if(maxtime<times[i]) maxtime=times[i]; //최대 시간 구하기
}
ll l=1; ll r=maxtime*n; //최대 총 시간
ll answer=maxtime*n;
while(l<=r){
ll mid= (l+r)/2; //2명의 심사자, 심사자 한명당 배정 시간
ll ret=0; //시간 내에 처리할 수 있는 사람수
for(int i=0;i<times.size();i++){
ret += mid/times[i];
}
if(ret<n) l=mid+1; //n명보다 적음, 시간을 더 늘림
else{ //n명보다 큼, 시간을 더 줄임
if(answer>mid) answer=mid; //제일 적은 배정시간으로 설정
r = mid-1;
}
}
return answer;
}
이분탐색은 참 새롭다.. 그만 좀 새로워라..
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
프로그래머스 문제풀이 모음 (4) | 2023.03.20 |
---|---|
프로그래머스 문제 풀이 모음 (0) | 2023.03.19 |
프로그래머스: 구명 보트 (0) | 2023.03.18 |
프로그래머스: 큰 수 만들기 (0) | 2023.03.18 |
프로그래머스 문제풀이 (0) | 2023.03.17 |