Coding Test/BaekJoon_Python

백준 1931 <회의실 배정> Python

JunOnJuly 2023. 11. 7. 21:55
728x90

https://www.acmicpc.net/problem/1931

 

1931번: 회의실 배정

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

www.acmicpc.net


그리디 알고리즘 문제로 리스트 정렬의 키를 지정할 수 있으면 쉽게 풀 수 있습니다.


def solution(N, data_list):
    # 시작시간에 맞추면 최대 회의수를 구할 수 없음
    # 1~4, 2~3, 3~4 가 있으면 1~4 는 1번 2~3, 3~4 는 2번
    # 끝나는 시간에 맞춰 정렬해야 한다
    # 끝나는 시간이 1순위, 시작시간이 2순위로 정렬
    data_list = sorted(data_list, key=lambda x:(x[1], x[0]))
    # 끝나는 시간
    end = 0
    # 데이터 인덱스
    idx = 0
    # 회의 수
    count = 0
    while True:
        # 총 회의 탐색 리스트를 벗어나면
        if idx >= len(data_list):
            return count
        # 회의 시작시간이 전 끝나는시간보다 길면
        if data_list[idx][0] >= end:
            # 끝난 시간 최신화
            end = data_list[idx][1]
            # 회의 횟수 + 1
            count += 1
            # 인덱스 하나 뒤로
            idx += 1
        # 아니면
        else:
            idx += 1


N = int(input())
data_list = [list(map(int, input().split())) for _ in range(N)]
print(solution(N, data_list))

 

728x90

'Coding Test > BaekJoon_Python' 카테고리의 다른 글

백준 2217 <로프> Python  (0) 2023.11.08
백준 1026 <보물> Python  (0) 2023.11.08
백준 11047 <동전 0> Python  (0) 2023.11.07
백준 10844 <쉬운 계단 수> Python  (0) 2023.11.05
백준 14501 <퇴사> Python  (0) 2023.11.05