ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 1931번 회의실
    알고리즘 자료구조 2021. 12. 4. 21:37
    728x90

    링크

     

    1931번: 회의실 배정

    (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다.

    www.acmicpc.net

    회의실은 한개고

    회의실의 시간들이 입력됩니다.

    각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 

     

    참고로 끝나는 시간의 입력은 오름차순이 아니에요

    8 12

    1 3

    이런식으로 입력이 될수도있어요

    근데 예제입력을 보면 끝나는시간이 오름차순이라

    맞왜틀이 나오면 끝나는 시간으로 오름차순 정렬을 안하지않았나 확인해보세요

     

    문제 해석

    3 4

    2 5

    7 9

    2 3

    시간이 이렇게 있으면

    우리는 겹치지않게 하면서 최대한 많은 회의 할수있게 만들어야합니다.

    일단 끝나는 시간을 기준으로 오름차순으로 정렬을 해야합니다

    왜냐면 끝나는 시간이 빨라야지 다음 회의를 더 많이 진행할수있으니까

     

    [ [3 ,4] , [2 ,5] , [7,9] , [2,3]]

     

    이렇게 되어있죠

    이걸 오름차순으로 정렬해보면

    [2,3] [3,4] [2,5] [7,9]

    이렇게 정렬할수있습니다.

    여기서 겹치지않게 뽑아낸다면

    2 3

    3 4

    7 9

    이렇게 배정해줄수있겠죠

    여기서 겹치지 않는다는건

    2시에 시작해서 3시에 끝나면

    다음 회의의 시작하는 시간이 3시거나 3시보다 커야한다는겁니다.

    그래서[2,3] [3,4] [2,5] [7,9] 이건

    회의를 3개할수있으니까

    정답은 3

     

    정답코드 Python

    case = int(input())
    times = []
    count = 1 #한개의 회의는 무조건 할수있으니까 1부터시작 
    
    for i in range(case):
        time = list(map(int,input().split(' ')))
        times.append(time)
    
    times.sort(key = lambda x: (x[1], x[0])) #끝나는시간으로 오름차순정렬 배열안에 배열이 들어있음
    
    endTime = times[0][1] #정렬하고 나서 첫 회의의 끝나는 시간 
    
    for T in range(1,len(times)): #두번째 회의부터 마지막 회의까지
        st = times[T][0] #시작시간
        et = times[T][1] #끝나는 시간
        if st >= endTime: #endTime보다 크거나 같으면 겹치지않는 회의라는거니까
            count += 1 #회의의 갯수 하나 올려줍니다
            endTime = et 
    print(count)

     

    728x90

    '알고리즘 자료구조' 카테고리의 다른 글

    백준 5622번 다이얼 Python  (0) 2021.12.07
    백준 11399번  (0) 2021.12.05
    백준 11047번 그리디 알고리즘  (0) 2021.12.04
    백준 17413번 파이썬  (0) 2021.09.17
    백준 4673번 셀프넘버 Python  (0) 2021.09.15
Designed by Tistory.