티스토리 뷰
문제 링크입니다 : https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 �
programmers.co.kr
문제를 꼼꼼히 읽어보지 않고 연산과정에서 만들어질 수 있는 최대값을 고려하지 않아서 조금 고생했던 문제이다.
high를 1,000,000,000으로 주는 게 실수가 컸다.
아래의 200번 돌리는 것은 200번이면 충분히 돌리고도 남아서이다. 이렇게 횟수를 정해 놓는 방법은 실수값을 계산하는 경우 매우 유용하다.
#include <string>
#include <vector>
#include <iostream>
#include <climits>
using namespace std;
typedef unsigned long long ll;
long long solution(int n, vector<int> times) {
ll answer = 0;
ll low = 0;
ll high = ULONG_LONG_MAX;
ll mid;
for(int i = 0; i < 200; i++) {
mid = (low + high) / 2;
ll pass = 0;
for(int i = 0; i < times.size(); i++) {
pass += mid / times[i];
}
if(pass < n) {
low = mid;
} else {
answer = mid;
high = mid;
}
}
return answer;
}

+ 같이 스터디 하시는 분의 코드
low <= high로 while을 돌리는 방법으로 작성하셨다.

개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 2019 카카오 개발자 겨울 인턴십 불량 사용자 (0) | 2020.08.19 |
---|---|
프로그래머스 - 야근 지수 (0) | 2020.08.15 |
프로그래머스 - 라면공장 (0) | 2020.07.25 |
프로그래머스 - 서울에서 경산까지 (0) | 2020.07.04 |
프로그래머스 - 2017 팁스타운 짝지어 제거하기 (0) | 2020.05.23 |
댓글