-
[3018] 캠프파이어BOJ 2021. 12. 3. 15:27
https://www.acmicpc.net/problem/3018
3018번: 캠프파이어
첫째 줄에 MT에 참가한 사람의 수 N이 주어진다. (1 ≤ N ≤ 100) 사람들은 1부터 N까지 번호가 매겨져 있으며, 선영이의 번호는 1이다. 둘째 줄에는 E가 주어진다. (1 ≤ E ≤ 50) 다음 E개 줄에는 그날
www.acmicpc.net
<문제>
입력이 작으므로, 효율성보다는 정확하게 구현하면 된다.
bool [n][idx]를, n번째 사람이 idx번째 노래를 아는 경우에 true를 갖도록 해주었고
캠프파이어에 참여한 인원은 vector<int>v에 입력받았다.
이후에 선영이가 존재하는 경우에는 v를 한번만 순회하며 새로운 노래를 아는 상태로 만들고
그렇지 않은 경우에는 v를 2중으로 순회하고, 현재까지 아는 노래만큼 추가로 순회하며
총 3중for로 노래를 공유하는 부분을 구현해주었다.
<소스코드>
1234567891011121314151617181920212223242526272829303132333435363738394041424344#include <bits/stdc++.h>using namespace std;bool chk[101][51];int n, e, idx = 1;int main(void) {cin >> n >> e;int i, j;for (i = 0; i < e; i++) {int k;cin >> k;vector<int> v;bool flag = false;for (j = 0; j < k; j++) {int x;cin >> x;if (x == 1) flag = true;v.push_back(x);}if (flag == true) {for (auto& i : v) {chk[i][idx] = true;}idx++;} else {for (auto& i : v)for (auto& j : v) {for (int X = 1; X < idx; X++) {if (chk[j][X] == true) chk[i][X] = true;}}}}for (i = 1; i <= n; i++) {bool flag = true;for (j = 1; j < idx; j++) {if (chk[i][j] == false) {flag = false;break;}}if (flag == true) cout << i << '\n';}return 0;}cs 'BOJ' 카테고리의 다른 글
[21772] 가희의 고구마 먹방 (0) 2021.12.05 [1459] 걷기 (0) 2021.12.04 [1100] 하얀 칸 (0) 2021.12.03 [1072] 게임 (0) 2021.12.02 [16165] 걸그룹 마스터 준석이 (0) 2021.12.01