[BOJ] 1931. 회의실 배정(python)

레몬커드요거트·2025년 1월 17일
0

코딩테스트준비

목록 보기
3/6
post-thumbnail

문제 풀이 아이디어

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

회의종료시간이 앞선 것부터 오름차순으로 정렬 후에, 회의시작시간 이 앞서도록 정렬

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

  • 종료시간 순으로 오름차순 정렬, 빨리 끝나는 회의를 선택
  • 종료시간이 같다면 시작시간이 빠른 회의 먼저 선택
    • [1,3][3,3]같은 경우 시작시간이 빠른게 먼저 시작되면 두 회의 모두 진행할 수 있게됨

오류 발생

TypeError: 'str' object is not callable

import sys
input = sys.stdin.readline()

n = int(input())

input을 변수로 선언한 후 sys.stdin.readline()을 다시 할당했기 때문에 발생한 문제 Python에서 input은 기본적으로 사용자 입력을 받는 내장 함수, 이를 변수로 덮어쓰면 이후로는 input() 함수가 아닌 문자열 객체로 간주되어 TypeError

해결 꾀 쓰지 말고 그냥 int(sys.stdin.readline())으로 사용하자

오류 발생

for _ in range(n):
	table = list(map(int, sys.stdin.readline().split()))

최종 결과 table 변수는 반복문이 끝난 후 마지막 입력만 저장

table.append((list(map(int, sys,stdin.readline().split())) 을 통해 리스트들 이어서 받기로도 사용 가능하다.

table = [list(map(int, sys.stdin.readline().split()))for _ in range(n)]
요소코드 1코드 2
데이터 저장 방식반복문이 돌 때마다 table에 덮어씀모든 입력을 리스트로 저장
결과 형태마지막 줄 입력만 저장 (list)모든 줄을 포함하는 2차원 리스트 (list of lists)
사용 사례하나의 데이터만 필요할 때 사용여러 줄의 데이터를 모두 저장해야 할 때 사용

최종코드

import sys

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

# 2차원 배열로 저장
table = [list(map(int, sys.stdin.readline().split()))for _ in range(n)]
table.sort(key=lambda x: (x[1], x[0]))

print(table)

end = 0
cnt = 0
for x in table:
  if x[0] >= end:
    cnt += 1
    end = x[1]
    
print(cnt)

sorting된 리스트에서 회의끝시간이 이어지도록 end에 저장하고, cnt +=1

회의시간리스트 참고

입력

11
1 4 / 3 5 / 0 6 / 5 7 / 3 8 / 5 9 / 6 10 / 8 11 / 8 12 / 2 13 / 12 14

print(table) 출력

[[1, 4], [3, 5], [0, 6], [5, 7], [3, 8], [5, 9], [6, 10], [8, 11], [8, 12], [2, 13], [12, 14]]

profile
비요뜨 최고~

0개의 댓글