[백준] 14569 시간표 짜기 JavaScript

·2024년 7월 11일

문제

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

이 친구들이 비어 있는 시간에 추가로 신청할 수 있는 과목의 후보 개수를 구해보자.

후보 개수를 세는 것이므로 현재 내 시간표에서 신청할 수 있는 과목끼리 시간이 겹치더라도 모두 세어야 한다.

즉, 월요일 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의 값을 가진다.

(월요일 1~10교시: 1~10, 화요일 1~10교시: 11~20, …)

다음 줄에 학생수 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줄에 걸쳐서 각 학생들의 들을 수 있는 과목 개수를 출력한다.

예제 입력

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
0
3
0
1

내가 했던 풀이 방법

  1. 입력받은 데이터 중 수업 정보를 classList에 저장한다. 이 때, 첫 번째 요소는 개수 데이터로 필요하지 않으므로, 제거한 배열을 추가해준다.
  2. M명의 비어있는 시간표 배열로 저장한다. 이때, 첫 번째 요소는 개수 데이터이므로, 해당 요소는 제거한다. count를 0으로 초기화한 뒤, classList의 데이터와 비교해서 classList의 시간 데이터가 모두 해당 인물의 비어있는 시간에 포함될 경우 count를 1 증가시킨다.
  3. 모든 시간표에 대해 검사 후 count 값을 answer에 추가해준다.
  4. answer를 한 줄마다 출력해준다.

코드

const fs = require('fs');
let [N, ...input] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');

N = Number(N);

let index = 0;
let classList = [];

for (let i = 0; i < N; i++) {
  let timetable = input[index++].trim().split(' ').map(Number);
  classList.push(timetable.splice(1));
}

let M = Number(input[index++]);
let answer = [];
for (let i = 0; i < M; i++) {
  let empty = input[index++].trim().split(' ').map(Number);
  let count = 0;
  empty.splice(0, 1);
  for (let j = 0; j < N; j++) {
    if (classList[j].every((value) => empty.includes(value))) {
      count++;
    }
  }
  answer.push(count);
}

console.log(answer.join('\n'));

회고

every로 쉽게 풀리는 문제였다. 좀 더 빡빡했다면...? 어려웠을지도

profile
Frontend🍓

0개의 댓글