Algorithm/📊 Problem Solving

[백준/BOJ] 14569 - 시간표 짜기

posted by sangmin

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을 이용해서 간단하게 풀어봤다.

 

14569번: 시간표 짜기

연세대학교 수강신청 기간이 시작되었다. 많은 친구들은 비어 있는 시간에 어떤 과목을 추가로 신청할 수 있는지를 궁금해 한다. 이 친구들이 비어 있는 시간에 추가로 신청할 수 있는 과목의

www.acmicpc.net