14569 - 시간표 짜기
📌 문제
연세대학교 수강신청 기간이 시작되었다. 많은 친구들은 비어 있는 시간에 어떤 과목을 추가로 신청할 수 있는지를 궁금해 한다.
이 친구들이 비어 있는 시간에 추가로 신청할 수 있는 과목의 후보 개수를 구해보자.
후보 개수를 세는 것이므로 현재 내 시간표에서 신청할 수 있는 과목끼리 시간이 겹치더라도 모두 세어야 한다.
즉, 월요일 1, 2, 3, 4, 5교시 시간이 비어 있고 한 과목의 시간이 월요일 1, 2, 3, 4교시이고 나머지 한 과목의 시간이 월요일 2, 3, 4, 5교시라면 2과목 모두 후보가 될 수 있다.
📋 코드
N = int(input())
courses = []
for _ in range(N):
tmp = list(map(int, input().split()))
courses.append(set(tmp[1:]))
M = int(input())
students = []
for _ in range(M):
tmp = list(map(int, input().split()))
students.append(set(tmp[1:]))
for student in students:
count = 0
for course in courses:
if course.intersection(student) == course:
count += 1
print(count)
💡 한마디
문제 분류는 비트마스킹으로 되어있긴 한데, set
을 이용해서 간단하게 풀어봤다.