์ฌ๋๋ค์ด ๋ฒํธ๊ฐ ์ ํ ์นด๋๋ฅผ ๊ฐ๊ณ ์๋๋ฐ, ์ด ๋ฒํธ๊ฐ ์์ ์ ๋ฒํธ๋ ์ต๋ํ ๋น์ทํด์ผ ํ๋ค.
์น๊ตฌ๊ด๊ณ์ ์ฌ๋๋ค์ ์นด๋๋ฅผ ๊ตํํ ์ ์๋ค.
์์ ์ ๋ฒํธ๋ ์นด๋์ ๋ฒํธ์ ์ฐจ์ด๋ฅผ ๋ถ๋ง์กฑ๋๋ผ๊ณ ํ๋๋ฐ, ์ด ๋ถ๋ง์กฑ๋๊ฐ ๊ฐ์ฅ ์ ์ ํฉ์ ๊ฒฝ์ฐ๋ฅผ ๊ตฌํด์ ์ต์ ๋ถ๋ง์กฑ๋ ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
์ฌ๋๋ค์ ์์ ์นด๋๋ฒํธ๋ 1๋ณด๋ค ํฌ๋ฉฐ, ์น๊ตฌ๊ด๊ณ๊ฐ ์์ ์๋ ์๋ค.
*ํด๊ฒฐ๋ฒ
1) ์น๊ตฌ๊ด๊ณ๋ฅผ ํํํ ํ๋ ฌ์ ๋ง๋ค๊ณ ์กฐํฉ์ ๊ตฌํ ๋, ์น๊ตฌ๊ด๊ณ์ด๋ฉด ํด๋น ์กฐํฉ์ ์ ํํด์ ๋ถ๋ง์กฑ๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ
2) ์น๊ตฌ๊ด๊ณ๋ฉด ์นด๋๋ฅผ ๋ค ๊ตํํ ์ ์์ผ๋ฏ๋ก, DFS๋ก ์น๊ตฌ๊ด๊ณ๋ฅผ ๊ตฌํ๊ณ ๊ทธ ์น๊ตฌ๋ค์ ์นด๋๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ํค๋ ๋ฐฉ๋ฒ
2) ๋ฐฉ๋ฒ์ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์์ ๊ฐ๋ค.
1๋ฒ~4๋ฒ ์ฌ๋์ด ์กด์ฌํ๊ณ 1-2๋ฒ, 2-3๋ฒ์ด ์น๊ตฌ์ฌ์ด์ด๋ค. 1~4๋ฒ์ด ๋ค๊ณ ์๋ ์นด๋๋ 3, 1, 5, 4๋ฒ ์ด๋ค.
1~3๋ฒ์ด ์๋ก ์ฐ๊ฒฐ๋ ์น๊ตฌ๊ด๊ณ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ค์ ์นด๋๋ฅผ ๋ง๊ตฌ ๋ฐ๊ฟ ์ ์๋ค.
์ด ๋, ๋ถ๋ง์กฑ๋๋ฅผ ์ต์๋ก ๊ฐ๊ฒ ํ๋ ค๋ฉด ์นด๋๋ฅผ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ํ(1, 3, 5) ์์๋๋ก 1,2,3๋ฒ์ด ๊ฐ๊ฒ ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์์ ๊ฐ์ผ ๊ฒ์ด๋ค.(4๋ฒ ์น๊ตฌ๋ ์น๊ตฌ๊ด๊ณ๊ฐ ์์ผ๋ฏ๋ก ์นด๋๋ฅผ ๊ตํํ ์ ์๋ค.)
์ฆ, ์ต์ ๋ถ๋ง์กฑ๋๋ ์์ ๊ฐ์ด ์นด๋๋ฅผ ๊ตํํ์ ๋์ด๊ณ 3์ ์ถ๋ ฅํ๋ฉด ๋๋ค.
*์์๋ ๊ฒ
1) ๋ฒกํฐ ํฌ๊ธฐ ๋ถ์ฌํ๋ฉฐ ์์ฑํ๋ ๋ฒ
vector<int> v(5); //ํฌ๊ธฐ5์ธ ๋ฒกํฐ ์์ฑ
vector<int> v(5, 0); // 5ํฌ๊ธฐ๋ก ๋ง๋ค๊ณ 0์ผ๋ก ์ด๊ธฐํ
2) ๋ฒกํฐ๋ก ๊ทธ๋ํ/ํธ๋ฆฌ ๊ด๊ณ ํํํ๋ ๋ฒ
vector<int> *graph = new vector<int>[3];
graph[0].push_back(1);
graph[1].push_back(0);
graph[0].push_back(2);
graph[2].push_back(0);
์ฆ, 0 1 ์ด ์ฐ๊ฒฐ๋์ด ์๋ค๊ณ ์ฃผ์ด์ง๋ฉด, 1๋ฐฐ์ด ๊ฐ์ 0 ๋ ๋ฒกํฐ๋ก ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
3) ๋ฒกํฐ resize
vector<int> v;
v.resize(5, 0);
5 ํฌ๊ธฐ๋ก ์ฌ์ค์ ํ๊ณ 0์ผ๋ก ์ด๊ธฐํํ๊ธฐ
*์ฝ๋
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> cardGroup, personGroup;
vector<bool> visited;
void DFS(int currentPerson, vector<int> cards, vector<int> *relations){
cardGroup.push_back(cards[currentPerson]);
personGroup.push_back(currentPerson);
for(auto& next: relations[currentPerson]){
if(visited[next]) continue;
visited[next] = true;
DFS(next, cards, relations);
}
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int personNum, relationNum;
long long answer = 0;
cin >> personNum >> relationNum;
//์นด๋ ์ ๋ณด ๋ฐ๊ธฐ
vector<int> cards(personNum + 1);
for(int i = 1; i <= personNum; i++){
cin >> cards[i];
}
//๊ด๊ณ๋ฅผ ๋ฒกํฐํ๋ ฌ๋ก ํํ
int person1, person2;
vector<int> *relations = new vector<int>[personNum + 1];
for(int i = 0; i < relationNum; i++){
cin >> person1 >> person2;
relations[person1].push_back(person2);
relations[person2].push_back(person1);
}
//BFS๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ฌ๋๋ค ์ฐพ๊ธฐ
visited.resize(personNum, false);
for(int i = 1; i <= personNum; i++){
if(visited[i]) continue;
visited[i] = true;
DFS(i, cards, relations);
//์ ๋ ฌํ๊ธฐ
sort(cardGroup.begin(), cardGroup.end());
sort(personGroup.begin(), personGroup.end());
//๋ถ๋ง์กฑ๋ ๊ตฌํ๊ธฐ
for(int j = 0; j < cardGroup.size(); j++){
answer += abs(cardGroup[j] - personGroup[j]);
}
cardGroup.clear();
personGroup.clear();
}
//์ ๋ต์ถ๋ ฅ
cout << answer;
return 0;
}
๊ทผ๋ฐ 10, 12๋ฒ์ด ํ๋ ธ๊ณ 28 ~ 59๊น์ง ํ์์์.........................
'๐ Coding Test Study > Algorithm Problem' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++][Baekjoon][๋ฌธ์์ด] 11655๋ฒ ROT13 (0) | 2024.02.17 |
---|---|
[C++][Baekjoon][๋ฌธ์์ด] 10808๋ฒ ์ํ๋ฒณ ๊ฐ์ (1) | 2024.02.03 |
[C++][Goorm][์ ๋ ฌ] ๋จ์ด์ฅ ๋ง๋ค๊ธฐ (1) | 2023.06.08 |
[C++][Programmers][BFS/DFS] ์์ดํ ์ค๊ธฐ (0) | 2023.06.06 |
[C++][Programmers][์คํ/ํ] ๋ค๋ฆฌ๋ฅผ ์ง๋๋ ํธ๋ญ (0) | 2023.06.04 |