개발자 톡

연습문제 톡 강의실 배정

강의실 배정 질문드립니다.

등록일
2021-10-12 22:21:19
조회수
768
작성자
prettyrain85


import sys
from random import *
from collections import deque

input_first = list(map(int,sys.stdin.readline().split()))  # [3]
n = input_first[0] # # int 값 : 3

s_f_list = []

for i in range(0, n): # 데이터 입력 받아서 2차원 리스트에 저장
    s, f = list(map(int,sys.stdin.readline().split()))
    s_f_list.append([s, f])


s_f_list.sort(key=lambda x:x[1]) # 2차원 리스트의 [1]번째 값으로 정렬

# print(s_f_list, type(s_f_list)) # [[1,3], [2,4], [3,5]]
# s_f_list = deque(s_f_list)
# print(s_f_list, type(s_f_list)) # deque([[1,3], [2,4], [3,5]])
# print(s_f_list[0], type(s_f_list[0])) # [1,3]  list
# print(s_f_list[0][0], type(s_f_list[0][0])) # 1  int
# # deque.popleft(s_f_list)
# s_f_list = deque.pop([0])
# print(s_f_list, type(s_f_list)) # deque([[2,4], [3,5]])

# ============================================================
a = 0
b = 1
c = 1

for i in range(0, n-1):
    
    now_list = s_f_list[a]
    next_list = s_f_list[b]
    now_start = s_f_list[a][0]
    now_end = s_f_list[a][1]
    next_start = s_f_list[b][0]
    next_end = s_f_list[b][1]

    if now_end <= next_start: # 이전 강의의 종료시간이 다음강의 시작시간보다 빠르면 카운트 + 1
        c += 1
        a = b
        b += 1
        # s_f_list.pop(-1)
        continue
    
    elif now_end > next_start: # 이전 강의의 종료시간이 다음강의 시작시간보다 늦으면 카운트 하지 않음
        a = a
        b += 1
        continue

print(c) # 최대 강의개수 출력


시간초과로 실패합니다.

아래 정렬부분이 시간을 상당히 잡아먹는거 같은데

1) 정렬 안하고 풀거나

2) 데이터를 입력받으면서 정렬하거나

3) 시간표를 만들어서 주소값으로 집어넣거나

혹시 이 경우가 가능한가요??


정렬은 안하면 시간이 더 걸릴것 같고

데이터를 입력 받으면서 정렬하는 신박한 아이디어는 떠오르지 않고..

시간표를 만들어서 주소값으로 집어넣자니 시간표가 10^9 나 이거도 불가능해 보입니다.


s_f_list.sort(key=lambda x:x[1]) # 2차원 리스트의 [1]번째 값으로 정렬

#강의실_배정
#python

이 카테고리의 톡 더보기