Algorithm

[백준/파이썬] 1931 회의실 배정 - 그리디

마크투비 2022. 7. 18. 14:55

소스 코드

import sys
n = int(sys.stdin.readline())

input_list = [0 for _ in range(n)]
for i in range(n):
    a, b = map(int, sys.stdin.readline().split())
    input_list[i] = (a, b)

input_list.sort(key=lambda x : (x[0], x[1]))

count = 0
latest_meeting = (0, 0)
for i in range(n):
    if input_list[i][0] >= latest_meeting[1]:
        latest_meeting = input_list[i]
        count += 1
    if input_list[i][1] < latest_meeting[1]: # swap하는 거니깐 count X
        latest_meeting = input_list[i]

print(count)
  • 계속 시간 초과가 발생했던 문제...😭
  • 이중 for 문을 사용하지 않아야 시간 초과가 발생하지 않음

주요 개념

  • 시간을 줄이기 위한 방법
    •  input()  대신  sys.stdin.readline() 을 사용하는 것이 좋음
    • 리스트를 안 쓸 수 있는 부분은 최대한 쓰지 말고 대신 변수 하나를 선언해서 할당하는 방법이 좋음
    • 배열에 원소를 추가할 때 빈 리스트를 만들어  append() 로 추가하는 것보다 리스트의 길이를 미리 알 수 있다면, 0으로 리스트를 채우고 인덱스로 접근하는 것이 좋음