티스토리 뷰

문제 링크입니다 : 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

지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/04   »
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
글 보관함