[프로그래머스.lv3] 입국심사

2021. 5. 3. 20:24·알고리즘 문제풀이

 

programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

풀이 (시간초과)

 

심사관이 일이 끝나는 시간 리스트를 만든다.

각 심사관의 시간만큼 더한 후 가장 일이 일찍 끝나는 심사관을 찾는다.

그 심사관에게 일을 맡긴다.

해당 심사관의 일이 끝나는 시간을 늘려준다.

 

심사관 수를 t라고 했을 때 한명을 처리하는데 가장 작은 심사관을 찾기 때문에 O(t)만큼 걸린다.

n명을 처리하니 시간복잡도는 O(tn)이다.

t는 최대 100000이고 n은 최대 1000000000이므로 제한시간을 통과하기 힘들다.

 

이분탐색 풀이

 

시간이 넉넉하다면 몇명을 처리할 수 있는가?

예를들어 심사관이 [7,10] 의 능률로 처리하고 40초가 주어진다 몇명을 처리할 수 있을까?

 

7의 능률을 가진사람은 5명, 10의 능률을 가진사람은 4명이다.

총 9명을 처리할 수 있다.

근데 지금 입국심사를 기다리는 사람 n = 6명이다. 그렇다면 40을 반으로 줄여본다.

20분으로 처리할 수 있는 사람은 각각 2명, 2명 해서 총 4명이다.

너무 적으니 다시 늘린다.

 

 

... (반복)

 

이런식으로 문제를 푸는게 이분탐색이다.

시간이 전체 범위에서 1/2 씩 없어지기 때문에 lon(n)의 시간 복잡도로 풀 수 있다.

입국심사를 할 수있는 인원을 계산할때 심사관 후보수(t)만큼 for문을 돌리기 때문에

총 시간복잡도는 t*log(n) 이다.

 

코드

def solve(mid,times):
    result = 0
    for time in times:
        result += mid//time
    return result

def solution(n, times):

    lo = 1
    hi = min(times)*n
    answer = 0

    while lo <= hi:
        mid = (lo+hi)//2

        result = solve(mid,times)

        if result < n: #너무 적게 사람을 처리한다 시간을 더 준다.
            lo = mid+1
        else: # 너무 많은 사람을 처리한다. 시간을 덜 준다.
            answer = mid
            hi = mid-1

    return answer


print(solution(6,[7,10]))

 

 

 

 

 

'알고리즘 문제풀이' 카테고리의 다른 글

[프로그래머스lv3] [2020 카카오 인턴십] 보석 쇼핑  (0) 2021.05.04
[프로그래머스lv.3] 순위  (0) 2021.05.04
[백준2262] 토너먼트 만들기  (0) 2021.05.03
[백준1958] LCS 3  (0) 2021.05.03
[백준1114] 통나무 자르기  (0) 2021.05.03
'알고리즘 문제풀이' 카테고리의 다른 글
  • [프로그래머스lv3] [2020 카카오 인턴십] 보석 쇼핑
  • [프로그래머스lv.3] 순위
  • [백준2262] 토너먼트 만들기
  • [백준1958] LCS 3
WildDevmon
WildDevmon
『앗! 야생의 개발몬(이)가 나타났다!』
  • WildDevmon
    야생의 개발몬
    WildDevmon
  • 전체
    오늘
    어제
    • 분류 전체보기 (34)
      • Server (4)
      • 알고리즘 문제풀이 (27)
      • 회고 (3)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ai개발자
    백준 인형들
    백준 어린 왕자
    백준 1114
    자바 최대공약수
    백준6980
    프로그래머스 정수 삼각형
    합승 택시 요금
    백준 1114 파이썬
    2020 카카오 인턴
    백준14465
    네이티브 메모리
    백준1747
    백준 30
    백준 고층 건물
    통나무 자르기
    자바 스레드 상태
    보석 쇼핑
    선발 명단
    코틀린 코루틴
    다이렉트 버퍼
    백준1238
    백준1188
    백준 17281
    백준2262
    1114백준
    토너먼트 만들기
    소가 길을 건너간 이유 5
    컴공 취준
    프로그래머스 보석 쇼핑
    소수&팰린드롬
    백준 1027
    커널 스레드 상태
    자바 물리 메모리
    백준 램프
    백준 1034
    네카라쿠배 취업
    백준15954
    자바 최소공배수
    백준 10610
    카카오 필요스펙
    파이썬
    카카오 1차
    direct buffer
    백준 1004
    백준 5347
    백준 18405
    경력 서류
    백준 파티
    백준 경쟁적 전염
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
WildDevmon
[프로그래머스.lv3] 입국심사
상단으로

티스토리툴바