Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- BFS
- Union-find
- 보석쇼핑
- 서버개발캠프
- 1편
- 알고리즘
- LIS #Algorithm #요소추적
- 백준
- 소감
- 카카오
- 중반부
- 카카오인턴
- 식단
- 투포인터
- IBK기업은행 #기업은행 #디지털 #직무 #정리
- Smilegate
- Algorithm
- 스마일게이트
- c++
- 유니온파인드
- 코테
- 코딩테스트
- BaekJoon
- 삼성 #코테 #2020상반기 #c++
Archives
- Today
- Total
짱아의 개발 기록장
프로그래머스. 입국심사(c++) / 이분탐색 본문
반응형
도저히.. 풀이가 생각이 나지 않아 다른 블로그의 아이디어만 참고해서 가닥을 잡을 수 있었다.
[메인 로직]
모든 경우의 수 중에서 가장 최악의 시간이 나올 경우를 찾는다.
ex) [7, 10], n = 6이면
최악의 시간은 10분이 걸리는 심사관에게 6명 모두가 입국심사를 받는 경우가 될 것이다.
그러면 최악의 시간은 총 60분이다.
Start = 1, End = 60으로 하고 이분탐색을 시작하면 된다.
mid = (Start+End)/2로 잡고 mid의 시간일 때 총 검사할 수 있는 인원의 수를 구한다.
30/7+30/10 = 7은 n=6의 값보다 크기 때문에 End = mid-1로 이분탐색을 쭉 진행하면 된다.
단! 조심해야하는 부분은 n값과 같은 값이 나왔다고 해서 바로 break로 빠져나오면 오답이다.....
더 작은 시간에서도 n과 같은 값이 나올 수도 있기 때문에 같을 경우에도 End = mid-1로 해서 계속적으로 탐색하는 것이 중요한 포인트이다!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | #include <string> #include <vector> #include <iostream> #include <algorithm> #include <climits> using namespace std; long long solution(int n, vector<int> times) { sort(times.begin(), times.end()); long long Start = 1; long long End = (long long)times[times.size()-1]*n; long long answer = End; while(Start<=End){ long long mid = (Start+End)/2; long long sum = 0; for(int i=0; i<times.size(); i++){ sum += (mid/times[i]); } if(sum>=n){ answer = min(answer, mid); End = mid-1; }else if(sum<n){ Start = mid+1; } } return answer; } | cs |
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[실력체크 level 1] 문자열을 숫자로! (0) | 2021.02.20 |
---|---|
프로그래머스. 등굣길(c++) / DP+BFS or DP+DFS (0) | 2021.01.09 |
프로그래머스. 네트워크(c++) / BFS (0) | 2021.01.08 |
프로그래머스. 디스크컨트롤러(c++) / 힙(Heap) (0) | 2021.01.08 |
프로그래머스. 카펫(c++) / 완탐(Brute Force) (0) | 2021.01.08 |
Comments