일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 3D RPG
- 프로그래머스
- 프로세스 상태
- LEVEL2
- level3
- level1
- solid 원칙
- Gold
- knapsack Problem
- BOJ
- two pointer
- algorithm
- trie
- programmers
- Euclidean
- BFS
- 8-Puzzle
- SWEA
- Silver
- Flyweight Pattern
- dirtyflag pattern
- Modern C++
- PrefixSum
- binary search
- Bronze
- Project
- Unity
- stack
- Zenject
- effective C++
Archives
- Today
- Total
Patrick's Devlog
[프로그래머스/C++] 입국심사 본문
1. 개요
https://school.programmers.co.kr/learn/courses/30/lessons/43238
1-1. 설명
n명이 입국 심사를 위해 줄을 서서 기다리고 있다. 각 입국 심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다르다. 처음 시작 시, 모든 심사대는 비어있으며, 한 심사대에 한 명만 심사가 가능하다. 모든 사람이 심사를 받는데 걸리는 시간을 최소로 하는 함수를 구현한다.
1-2. 제한 사항
- 입국 심사를 기다리는 사람 수 n은 1 이상 1,000,000,000 이하 자연수
- 각 심사관이 한명을 심사하는데 걸리는 시간 배열은 times, 한 명을 심사하는데 걸리는 시간은 1 이상 1,000,000,000 이하 자연수
- 심사관은 1 이상 100,000 이하
2.구현
2-1. 풀이
이분 탐색 문제이나, 기준을 어디서 둬야할 지 살짝 헤맸었다. times를 기준으로 두지말고 [1 ~ 모두 검사하는데 걸리는 최대시간]을 기준으로 이분 탐색을 진행하며 n명 이상이 걸리는 시간의 최솟값을 반환하면 된다.
2-2. 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long minimumTime;
long long BinarySearch(long long first, long long last, int n, vector<int> times);
long long solution(int n, vector<int> times) {
minimumTime = 0;
sort(times.begin(), times.end());
long long answer = BinarySearch(1, n * (long long) times.back(), n, times);
return answer;
}
long long BinarySearch(long long first, long long last, int n, vector<int> times){
if (first > last) return minimumTime;
long long mid = (first + last) / 2;
// mid : 심사를 받는데 걸리는 시간
long long count = 0;
for (long long time : times) count += (mid / time);
// mid 시간 기준 몇 명의 인원이 처리되었는지 확인
if (count >= n) {
minimumTime = mid;
return BinarySearch(first, mid - 1, n, times);
}
else return BinarySearch(mid + 1, last, n, times);
}
'Algorithm > Algorithms Practice' 카테고리의 다른 글
[BOJ/C++] 문제 추천 시스템 Version 1(21939번) (1) | 2024.02.07 |
---|---|
[BOJ/C++] 문자열 집합 (1) | 2024.01.30 |
[프로그래머스/C++] 피로도 (0) | 2023.11.16 |
[프로그래머스/C++] 야근 지수 (0) | 2023.11.15 |
[BOJ/C++] 주식(11501번) (0) | 2023.01.13 |