알고리즘 풀이/프로그래머스

★★ [프로그래머스][JAVA] 입국심사 (이진탐색) #2

배게 2021. 10. 14. 03:21
728x90

#2

Line:7

int*int형을 곱하기전에 제발 둘 중 하나를 long형으로 바꿔줘야 한다고

 

 

 

일단 스스로는 못풀었음 이분탐색이 뭔지는 아는데 구현을 못함

이분탐색 한 10문제정도는 풀어놔야겠음

 

모든 변수들을 long으로 통일해줘야하고

Line:7의 right값(high값)을 도대체 뭘로 설정해주어아햐는가

맨처음에는 Integer.MAX_VALUE or Long.MAX_VALUE..? 이런거 써야되나 싶었음 진짜

 

그리고 Line:22부분에 answer=mid 이 부분도 좀 헷갈림

if(man<n) else if(man>n) else if(man==n)

이렇게 조건문을 3개로 거는 것이 아니고

작은 경우를 제외한 나머지 조건을 else로 빼줘서 아래처럼 처리하면

lower bound를 알아서 찾아주는 메커니즘이 좀 신기했음..

 

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
import java.util.*;
 
class Solution {
    public long solution(int n, int[] times) {
        Arrays.sort(times);
        long left = 0;
        long right = (long)n * times[times.length-1];
        long mid = 0;
        long answer = 0;
        
        while(left<=right){
            long man = 0;
            mid = (left+right)/2;
            for(int time : times)
                man+=(mid/time);
            
            if(man<n){
                left = mid+1;
            }
            else{
                right = mid-1;    
                answer = mid;
            }
        }
        
 
        return answer;
    }
}
cs