유형 : 이분 탐색

풀이 시간 : 인터넷 검색 

 

def solution(n, times):
    times.sort()
    answer = 0
    #이분 탐색
    start = 0
    end = n * times[len(times)-1] #최댓값 = 가장 오래 걸릴 경우 
    
    while start <= end:
        # 가운데 지점 지정 
        mid = (start + end) // 2
        
        # mid 시간에 처리할 수 있는 사람 수 구하기 
        people = 0
        for t in times:
            people += (mid // t) 
            
        # 이분 탐색 
        if people < n: #탐색 불가능한 경우
            start = mid + 1 # 답은 뒤쪽에 있으므로 뒤를 탐색 
        elif people >= n: #탐색 가능한 경우
            answer = mid #우선 답을 저장 
            end = mid - 1 #더 작은 값을 찾기 위해 앞부분 탐색 
            
    return answer

 

풀이법이 정말 기발한.. 문제였다.

이게 왜 이분탐색이야!? 싶었던 문제...

 

0~최대 시간까지의 범위에서

mid 시간을 지정, 그 시간 내에 검사할 수 있는 사람의 수를 구하고

검사 가능한 사람의 수가 목표보다 더 많다면 (성공) = 저장 후 탐색 계속 (앞부분)

검사 가능한 사람의 수가 목표보다 더 작다면 (실패) = 뒷부분 탐색! 

'프로그래머스 > Lv. 2' 카테고리의 다른 글

17. 조이스틱 ★★ - 보류  (0) 2024.07.19
16. 게임 맵 최단거리 ★ (BFS, zip)  (0) 2024.07.19
15. 타겟 넘버 ★(DFS)  (0) 2024.07.18
14. 카펫 (완전 탐색)  (0) 2024.07.18
13. 소수 찾기 (완전 탐색)  (1) 2024.07.18
복사했습니다!