ํ ์คํธ์ผ์ด์ค๋ ๋ค ๋ง์กฑํ๋๋ฐ ์๊พธ ํ๋ ธ์ต๋๋ค๊ฐ ๋ ์ ์งฌ์งฌ์ด 3์ผ์ ๊ฑฐ์ณ ๋งํ๋ธ ๋ฌธ์ ..
์ฒ์์ ์๊ฐํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ ์ถ์ ๊ณ ์ง ๋๋ฌธ์ ์๊ฐ์ ๋ง์ด ๋ ๋ ธ๋ค. ์ฌ๋ฌ๋ถ์ ๊ทธ๋ฌ์ง ๋ง์ธ์..
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์์ด๋์ด๋
๋์นญ ๊ตฌ์กฐ๋ก ์น๊ตฌ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
์์ ์ ํจ๊ป ์์๋ณด์.
์์ 1์ ๋ณด๋ฉด ์ฒซ ์ค์ 3(๋ช ) 2(๊ฐ์ง ๊ด๊ณ๋ฅผ ์ ๋ ฅํ ์์ )์ด ๋ํ๋์๋ค.
๊ทธ ์๋ 1๊ณผ 2๊ฐ ์น๊ตฌ, 2์ 3์ด ์น๊ตฌ์ธ ์ํ๋ผ๊ณ ์๋ ค์ฃผ๊ณ ์๋ค.
์ด๋ฅผ 3x3๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ์ ์ฅํ๋ค๊ณ ์๊ฐํด๋ณด์.
์ฌ๋1 | ์ฌ๋2 | ์ฌ๋3 | |
์ฌ๋1 | X(์น๊ตฌ์๋) | O(์น๊ตฌ์) | X |
์ฌ๋2 | O | X | O |
์ฌ๋3 | X | O | X |
1๊ณผ 3์ด ์น๊ตฌ๋ฉด 3๊ณผ 1๋ ๋น์ฐํ ์น๊ตฌ์ธ ๊ฒ์ด๋ ์์ ๊ฐ์ด ๋๊ฐ์ ๋์นญ์ธ ํ๋ฅผ ๊ทธ๋ฆด ์ ์๋ค.
์ด ์๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ค.
#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
int main() {
int N, M;
cin >> N >> M;
vector<unordered_set<int>> social(N + 1);
for (int i=0 ; i<M ; i++){
int A, B;
cin >> A >> B;
social[A].insert(B);
social[B].insert(A);
}
vector<int> day;
int check = M*2;
while (check < (N * (N - 1)) -1) {
int tmp =0;
vector<unordered_set<int>> m = social;
for (int i = 1; i <= N; i++) {
for (int z : social[i]) {
for (int k : social[z]) {
if ((i != k) && (social[i].find(k) == social[i].end()) && (m[i].find(k)==m[i].end())){
m[i].insert(k);
tmp += 1;
check += 1;
}
}
}
}
for (int j=1 ; j<=N;j++)social[j].insert(m[j].begin(),m[j].end());
day.push_back(tmp/2);
}
cout << day.size() << endl;
for (int value : day) cout << value << endl;
return 0;
}
social์ ๋ฒกํฐ๋ค. ์์ unsigned_set์ ๋ด๊ณ ์๋ค.
social ๋ฒกํฐ์ [k]๋ฒ์งธ ์์๋ k๋ฒ์งธ ์ฌ๋์ ์น๊ตฌ ๋ชฉ๋ก์ ๋ด๊ณ ์๋ค.
์น๊ตฌ ๋ชฉ๋ก์๋ ์ฐ์ ์์๊ฐ ํ์์์ผ๋ฏ๋ก unsigned_set์ผ๋ก ์ ์ํ๋ค. vector๋ก ์ ์ํ์ ๋๋ณด๋ค ํ์๋ ๋ ๋น ๋ฅด๋ค.
while ๋ฌธ ์์์๋ m์ด๋ผ๋ social์ ๋ณต์ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ,
์๋ํ๋ฉด social์์ ์ ์น๊ตฌ ๊ด๊ณ๋ฅผ ์ฐพ์๋ด๋ฉด์ ๋์์ ์ ์น๊ตฌ๋ฅผ ์
๋ฐ์ดํธ ํ๋ฉด
๋ฌด์กฐ๊ฑด ํ๋ฃจ๋ง์ ์น๊ตฌ ๊ด๊ณ๊ฐ ์ ๋ถ ๋งบ์ด์ง๊ฒ ๋๋ฏ๋ก ํ๋ฆฐ ํ์ด๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฒฐ๊ตญ ํ๋ฃจ ์์ ์ผ์ด๋ ์น๊ตฌ ๊ด๊ณ๋ผ๋ฆฌ๋ ์๋ก ์ํฅ์ ์ฃผ๋ฉด ์ ๋๋
๋ฒกํฐ m์ ํ๋ฃจ ์์ ์๊ฒจ๋ ์น๊ตฌ ๊ด๊ณ๋ฅผ ๋ด์ ๋ค์ m์ด ๋ชจ๋ ๋ชจ์ด๋ฉด ๊ทธ m์ social์ ์ ๋ฐ์ดํธํ๋ค.
์๋ if๋ฌธ์ ์ดํด๋ณด์.
while๋ฌธ์ i์ ์น๊ตฌ z์ ์น๊ตฌ k๋ฅผ i์ ์น๊ตฌ๋ก ์ถ๊ฐํ๋ ์ฝ๋๋ค. ์ด๋ k๊ฐ i์ ์์น๊ตฌ๋ก ์ถ๊ฐ๋๋ ์กฐ๊ฑด์, 1) k๊ฐ i ๋ณธ์ธ์ด ์๋์ด์ผ ํ๊ณ , 2) ์ด๋ฏธ ์น๊ตฌ๊ฐ ์๋์ด์ผํ๋ฏ๋ก social[i]์ k๊ฐ ์์ด์ผํ๊ณ , 3) ์ค๋ ์ด๋ฏธ ๋ค๋ฅธ ๋ฃจํธ๋ก ๋์ด ์น๊ตฌ๊ฐ ๋์ง ์์์ด์ผ ํ๋ค.
if ((i != k) && (social[i].find(k) == social[i].end()) && (m[i].find(k)==m[i].end())){
m[i].insert(k);
tmp += 1;
check += 1;
}
๋ ์ถ๊ฐ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ถ์ฒํด๋ณด์๋ฉด..
2 1
1 2 ๋ฅผ ์ ๋ ฅํ๋ฉด
0 ์ด ์ถ๋ ฅ๋์ด์ผ ํ๊ณ
4 3
1 2
1 3
3 4 ๋ฅผ ์ ๋ ฅํ๋ฉด
2
2
1์ด ์ถ๋ ฅ๋์ด์ผ ํ๋ค.
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python][AI] pandas, numpy ๊ธฐ์ด ํจ์ ์ ๋ฆฌ (1) | 2023.10.09 |
---|---|
[BOJ] ์ฝ๋ฉ ๋ฌธ์ ํ์ด๋ ๊นํ๋ธ์! (0) | 2023.08.22 |
[BOJ] 1058๋ฒ. ์น๊ตฌ (C++ 17) (0) | 2023.08.02 |
[BOJ] C++์ฐ์ตํ๊ธฐ! ๋ฐฑ์ค ๋ฌธ์ ์ง (by jihwan0319) (0) | 2023.08.01 |
[C++] ๋ฆฌ์คํธ(list)์ ๋ฒกํฐ(vector)์ ์ฐจ์ด (0) | 2023.07.31 |