반응형
프로그래머스 링크
https://school.programmers.co.kr/learn/courses/30/lessons/43238
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
long long solution(int n, vector<int> times)
{
long long answer = 0;
// 호춘쿠키님의 글을 보고 적고 공부내용임
// 주석 걸린내용 대부분 호춘쿠키님의 주석내용(이해가기 쉽게 주석 완벽히 달아놓으셔서 그대로 작성하였고
// 두 가지 부분만 다르게 생각하여 수정해줌)
// 1. 호춘쿠키님은 최소 시작값 start변수 값을 1로 주었는데 times[0] * 1이 맞는거 같다고 생각이 들어 수정함.
// 2. 중간에 cnt값을 구해주는 과정에서 times의 원소값을 longlong으로 형변환 해주어야 될 거 같아서 변경해줌.
// 호춘쿠키님 출처 : https://hochoon-dev.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EC%9E%85%EA%B5%AD%EC%8B%AC%EC%82%AC-c
// 가장 오래 걸리는 심사관의 시간을 알기 위한 정렬.
sort(times.begin(), times.end());
// 시간으로 기준을 두었을 때 최소 => 위에서 정렬을 해주었기 때문에 가장 적은 시간을
// 소모하는 심사관의 최소 시간 * 1인데 * 1는 무의미 하기 때문에 생략
long long start = (long long)times[0];
// 시간으로 기준 두었을 때 최대 => 심사 시간이 가장 오래 걸리는 사람에게 n명 모두 갔을 때
long long end = (long long)times[times.size() - 1] * n;
// 탐색 범위(시간) 기준
long long mid;
while (start <= end)
{
// 중앙값
mid = (start + end) / 2;
// mid 시간동안 심사 처리할 수 있는 모든 사람 수
long long cnt = 0;
for (int i = 0; i < times.size(); i++)
{
// 각 시간별 mid 시간 동안 처리할 수 있는 사람들 수를 더해준다.
cnt += mid / (long long)times[i];
}
// mid 시간동안 처리할 수 있는 모든 사람 수가 n명 보다 작기 때문에 해당 문제 조건 만족 X
if (cnt < n)
{
// 최소값을 mid + 1 로 좁혀준다.
start = mid + 1;
}
// mid 시간 동안 처리할 수 있는 사람들이 n명 이상으로 해당 문제의 조건을 만족한다면
else
{
// mid(기준 시간) 값이 end(최대 시간) 값 보다 이하면
// mid 는 최소값이 될 수도 있기 때문에 answer에 넣어주고
if (mid <= end)
{
answer = mid;
}
// 최소 값을 찾기 위해 범위를 더 좁혀준다
end = mid - 1;
}
}
return answer;
}
반응형
'프로그래머스 > lv3' 카테고리의 다른 글
프로그래머스 : 동적계획법(Dynamic Programming) > 정수 삼각형(lv3)c++ (0) | 2023.04.13 |
---|---|
프로그래머스 : 깊이/너비 우선 탐색(DFS/BFS) > 아이템 줍기(lv3) (0) | 2023.04.07 |
프로그래머스 : 깊이/너비 우선 탐색(DFS/BFS) > 네트워크(lv3) (0) | 2023.04.06 |
프로그래머스 : 최고의 집합(lv3) (0) | 2023.04.02 |
프로그래머스 : 이중우선순위큐(lv3) (0) | 2023.03.20 |
댓글