[백준 14569번 C/C++] 시간표 짜기
[백준 14569번 C/C++] 시간표 짜기

https://www.acmicpc.net/problem/14569
해결전략
비트마스킹 Bitmasking
정답코드
#include <iostream> #include <vector> using namespace std; int n; // 총 과목의 수 int m; // 학생의 수 vector<unsigned long long> lectures; // 각 과목의 시간표를 비트마스크로 저장할 벡터 // 시간표를 비트마스크로 변환하는 함수 unsigned long long ConvertToBitmask(const vector<int>& times) { unsigned long long binary = 0; for (int i = 0; i < times.size(); i++){ binary |= (1ULL << times[i]); // 해당 시간에 대응하는 비트를 1로 설정 } return binary; } int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n; lectures.resize(n); for (int i = 0; i < n; i++) { int k; // 각 과목의 수업시간의 수 cin >> k; vector<int> times(k); for (int j = 0; j < k; j++){ cin >> times[j]; } lectures[i] = ConvertToBitmask(times); // 수업시간을 비트마스크로 변환하여 저장 } cin >> m; // 학생 수 for (int i = 0; i < m; i++) { int p; // (각 학생 당) 비어 있는 교시 개수 cin >> p; vector<int> students(p); for (int j = 0; j < p; j++){ cin >> students[j]; } unsigned long long studentBitmask = ConvertToBitmask(students); int cnt = 0; // 학생이 들을 수 있는 과목의 수 for (int j = 0; j < lectures.size(); j++) { // 학생의 비어 있는 교시와 과목의 수업시간을 비교하여 학생이 들을 수 있는지 확인 if ((studentBitmask & lectures[j]) == lectures[j]) { cnt++; } } cout << cnt << "\n"; // 각 학생이 들을 수 있는 과목의 수 출력 } return 0; }
'⭐ 코딩테스트 > 백준' 카테고리의 다른 글
[백준 2800번 C/C++] 괄호 제거 (0) | 2024.07.31 |
---|---|
[백준 15787번 C/C++] 기차가 어둠을 헤치고 은하수를 (0) | 2024.07.30 |
[백준 14503번 C/C++] 로봇 청소기 (0) | 2024.07.28 |
[백준 17135번 C/C++] 캐슬 디펜스 (0) | 2024.07.25 |
[백준 13335번 C/C++] 트럭 (2) | 2024.07.24 |
댓글
이 글 공유하기
다른 글
-
[백준 2800번 C/C++] 괄호 제거
[백준 2800번 C/C++] 괄호 제거
2024.07.31 -
[백준 15787번 C/C++] 기차가 어둠을 헤치고 은하수를
[백준 15787번 C/C++] 기차가 어둠을 헤치고 은하수를
2024.07.30 -
[백준 14503번 C/C++] 로봇 청소기
[백준 14503번 C/C++] 로봇 청소기
2024.07.28 -
[백준 17135번 C/C++] 캐슬 디펜스
[백준 17135번 C/C++] 캐슬 디펜스
2024.07.25
댓글을 사용할 수 없습니다.