728x90
문제
9335번: 소셜 광고
boj.ma
풀이
문제 요약
최소한의 사용자에게만 광고를 게시해, 전체 사용자들이 광고를 모두 볼 수 있도록 하자.
아이디어
N개의 줄에 걸쳐 i번째 사용자의 친구 d명의 번호가 주어진다.
이중에서 최소한의 사용자를 선택해 전체 N명에게 광고를 게시해야 한다.
사용자와 친구를 비트마스킹으로 표현하자.
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
final int d = Integer.parseInt(st.nextToken());
// Solve
friend[i] = 1 << i;
for (int j = 0; j < d; j++) {
friend[i] |= 1 << (Integer.parseInt(st.nextToken()) - 1);
}
}
광고를 게시할 임의의 사용자(select)를 선택하고, 선택된 사용자의 친구들을 모두 합쳤을 때, N명 모두에게 광고를 게시할 수 있는지 확인하자.
광고를 게시할 임의의 사용자가 최소가 되도록 결과를 갱신하면 된다.
int res = N;
for (int select = 1; select < (1 << N); ++select) {
int cnt = 0;
int check = 0;
for (int i = 0; i < N; i++) {
if ((select & (1 << i)) != 0) {
check |= friend[i];
++cnt;
}
}
if (check == (1 << N) - 1) {
res = Math.min(res, cnt);
}
}
풀이시간
10분
소스코드
https://github.com/rogi-rogi/problem-solving/blob/main/baekjoon-online-judge/easy/09335.java
problem-solving/baekjoon-online-judge/easy/09335.java at main · rogi-rogi/problem-solving
Daily Problem Solving Challenges. Contribute to rogi-rogi/problem-solving development by creating an account on GitHub.
github.com
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 15702] 중간고사 채점 [Java] (1) | 2025.07.10 |
---|---|
[백준 02615] 오목 [Java] (1) | 2025.07.04 |
[백준 23293] 아주 서바이벌 [Java] (0) | 2025.06.30 |
[백준 15886] 내 선물을 받아줘 2 [Java] (1) | 2025.06.25 |
[백준 30518] 짜고 치는 가위바위보 (Small) [Java] (1) | 2025.06.14 |