문제
연세대학교 수강신청 기간이 시작되었다. 많은 친구들은 비어 있는 시간에 어떤 과목을 추가로 신청할 수 있는지를 궁금해 한다.
이 친구들이 비어 있는 시간에 추가로 신청할 수 있는 과목의 후보 개수를 구해보자.
후보 개수를 세는 것이므로 현재 내 시간표에서 신청할 수 있는 과목끼리 시간이 겹치더라도 모두 세어야 한다.
즉, 월요일 1, 2, 3, 4, 5교시 시간이 비어 있고 한 과목의 시간이 월요일 1, 2, 3, 4교시이고 나머지 한 과목의 시간이 월요일 2, 3, 4, 5교시라면 2과목 모두 후보가 될 수 있다.
입력
연세대학교의 총 과목의 수 N (3 ≤ N ≤ 1000)이 주어진다.
N줄에 걸쳐서 각 과목의 수업시간의 수 k (4 ≤ k ≤ 50)가 주어지고 그 옆에 k개의 숫자 ti (1 ≤ ti ≤ 50)가 공백으로 구분되어 주어진다.
ti는 이 과목의 수업이 진행되는 교시를 의미하며 1 ~ 50의 값을 가진다.
(월요일 110교시: 110, 화요일 110교시: 1120, …)
다음 줄에 학생수 M (1 ≤ M ≤ 10000) 이 주어진다.
M줄에 걸쳐서 각 학생들의 비어 있는 교시 개수 p (0 ≤ p ≤ 50)가 주어지고 그 옆에 p개의 숫자 qi (1 ≤ qi ≤ 50)가 공백으로 구분되어 주어진다.
Ex) 알고리즘의 수업시간이 화요일 2, 3교시, 수요일 4, 5교시라면 다음과 같이 입력이 주어진다.
4 12 13 24 25
출력
M줄에 걸쳐서 각 학생들의 들을 수 있는 과목 개수를 출력한다.
예제 입력 1
3
4 1 2 3 4
6 5 6 7 8 9 10
4 11 21 31 41
5
8 1 2 3 4 5 6 7 8
7 1 2 3 7 8 9 10
14 1 2 3 4 5 6 7 8 9 10 11 21 31 41
5 41 42 43 44 45
10 1 5 6 7 8 9 10 11 21 31
예제 출력 1
1
0
3
0
1
문제 풀이
total_subject = int(input())
each_subject = []
for _ in range(total_subject):
subject = list(map(int,input().split()))
each_subject.append(set(subject[1:]))
total_student = int(input())
each_student = []
for _ in range(total_student):
student = list(map(int,input().split()))
each_student.append(set(student[1:]))
for i in range(len(each_student)):
cnt = 0
for j in range(len(each_subject)):
if each_subject[j].intersection(each_student[i]) == each_subject[j]: #교집합을 구했을 때 subject와 같다면 cnt +1씩 증가
cnt +=1
print(cnt)
'Algorithm > baekjoon' 카테고리의 다른 글
Baekjoon [2644] 촌수계산 - python (0) | 2023.02.11 |
---|---|
Baekjoon [2565] 전깃줄 - python (0) | 2023.02.11 |
Baekjoon [3085] 사탕게임 - python (0) | 2023.01.25 |
Baekjoon [11048] 이동하기 - python (4) | 2023.01.17 |
Baekjoon [1904] 01타일 - python (0) | 2023.01.17 |