개발자 톡
연습문제 톡
강의실 배정
강의실 배정 질문드립니다.
- 등록일
- 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