반응형
1. 어떤 사람 p의 2-친구수는 p가 아닌 나머지 모든 사람에 대해 2-친구 여부를 판별해서 구할 수 있다.
2. 모든 사람의 2-친구수를 각각 구한 뒤 그 중 최대값을 찾는다.
1. 어떤 사람 p의 2-친구수는 p가 아닌 나머지 모든 사람에 대해 2-친구 여부를 판별해서 구할 수 있다.
어떤 사람 p의 2-친구수는 k(k != p)인 모든 사람에 대해 친구 여부를 판별해서 구할 수 있다. 두 사람 A, B가 2-친구 사이인지 구하려면 두 사람 모두와 친구인 사람 C가 있는지 찾아야 하므로 O(N)의 시간복잡도가 든다. 따라서 어떤 사람 p의 2-친구수를 구하는데는 O(N^2)의 시간복잡도가 들게 된다.
2. 모든 사람의 2-친구수를 각각 구한 뒤 그 중 최대값을 찾는다.
모든 사람에 대해 2-친구수를 구한 뒤, 그 중 최대값을 출력한다. O(N^2)의 1번 과정을 모든 사람에 대해 반복하므로 전체 시간복잡도는 O(N^3). N이 매우 작으므로 브루트포스로 해결할 수 있다.
반응형
#include <iostream>
using namespace std;
int N;
bool friends[51][51];
bool isFriend(int a, int b) {
if (a == b) return false;
if (friends[a][b]) return true;
for (int c=0; c<N; c++) {
if (friends[a][c] && friends[b][c]) return true;
}
return false;
}
int count2Friends(int p) {
int ret = 0;
for (int i=0; i<N; i++) {
if (isFriend(p, i)) ret++;
}
return ret;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
string S;
for (int i=0; i<N; i++) {
cin >> S;
for (int j=0; j<N; j++) {
friends[i][j] = S[j] == 'Y';
}
}
int max2Friends = 0;
for (int i=0; i<N; i++) {
max2Friends = max(max2Friends, count2Friends(i));
}
cout << max2Friends;
return 0;
}
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
백준 13459번 구슬 탈출 - C++ 풀이 (0) | 2022.06.03 |
---|---|
백준 2573번 빙산 - C++ 풀이 (0) | 2022.06.02 |
백준 5676번 음주 코딩 - C++(cpp) 풀이 (0) | 2022.05.31 |
백준 11376번 열혈강호 2 - C++(cpp) 풀이 (0) | 2022.05.27 |
백준 11375번 열혈강호 - C++(cpp) 풀이 (0) | 2022.05.23 |
댓글