https://school.programmers.co.kr/learn/courses/30/lessons/42861#
๋ฌธ์ ์ค๋ช
n๊ฐ์ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ๋ ๋น์ฉ(costs)์ด ์ฃผ์ด์ง ๋, ์ต์์ ๋น์ฉ์ผ๋ก ๋ชจ๋ ์ฌ์ด ์๋ก ํตํ ๊ฐ๋ฅํ๋๋ก ๋ง๋ค ๋ ํ์ํ ์ต์ ๋น์ฉ์ return ํ๋๋ก solution์ ์์ฑํ์ธ์.
๋ค๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ๊ฑด๋๋๋ผ๋, ๋๋ฌํ ์๋ง ์์ผ๋ฉด ํตํ ๊ฐ๋ฅํ๋ค๊ณ ๋ด ๋๋ค. ์๋ฅผ ๋ค์ด A ์ฌ๊ณผ B ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์๊ณ , B ์ฌ๊ณผ C ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ๊ฐ ์์ผ๋ฉด A ์ฌ๊ณผ C ์ฌ์ ์๋ก ํตํ ๊ฐ๋ฅํฉ๋๋ค.
์ ํ์ฌํญ
- ์ฌ์ ๊ฐ์ n์ 1 ์ด์ 100 ์ดํ์ ๋๋ค.
- costs์ ๊ธธ์ด๋ ((n-1) * n) / 2์ดํ์ ๋๋ค.
- ์์์ i์ ๋ํด, costs[i][0] ์ costs[i] [1]์๋ ๋ค๋ฆฌ๊ฐ ์ฐ๊ฒฐ๋๋ ๋ ์ฌ์ ๋ฒํธ๊ฐ ๋ค์ด์๊ณ , costs[i] [2]์๋ ์ด ๋ ์ฌ์ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ๋ฅผ ๊ฑด์คํ ๋ ๋๋ ๋น์ฉ์ ๋๋ค.
- ๊ฐ์ ์ฐ๊ฒฐ์ ๋ ๋ฒ ์ฃผ์ด์ง์ง ์์ต๋๋ค. ๋ํ ์์๊ฐ ๋ฐ๋๋๋ผ๋ ๊ฐ์ ์ฐ๊ฒฐ๋ก ๋ด ๋๋ค. ์ฆ 0๊ณผ 1 ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ ๋น์ฉ์ด ์ฃผ์ด์ก์ ๋, 1๊ณผ 0์ ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค.
- ๋ชจ๋ ์ฌ ์ฌ์ด์ ๋ค๋ฆฌ ๊ฑด์ค ๋น์ฉ์ด ์ฃผ์ด์ง์ง ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ๋ ์ฌ ์ฌ์ด์ ๊ฑด์ค์ด ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ๋ด ๋๋ค.
- ์ฐ๊ฒฐํ ์ ์๋ ์ฌ์ ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
n | costs | return |
4 | [[0,1,1],[0,2,2],[1,2,5],[1,3,1],[2,3,8]] | 4 |
์ ์ถ๋ ฅ ์ ์ค๋ช
costs๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ์ด๋ ์ด๋ก์ ๊ฒฝ๋ก๋ก ์ฐ๊ฒฐํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ ์ ๋น์ฉ์ผ๋ก ๋ชจ๋๋ฅผ ํตํํ ์ ์๋๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ด ํด๋ต
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
#include <iostream>
using namespace std;
int solution(int n, vector<vector<int>> costs) {
int answer = 0;
vector<bool> visited(n, false);
// ์ฐ์ ์์ ํ : ๊ฐ์ค์น ์ค๋ฆ์ฐจ์ ์ ๋ ฌ (first-๊ฐ์ค์น, second-์ธ๋ฑ์ค)
priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> nodes;
// ์ฒซ๋ฒ์งธ ์ฌ ์ถ๊ฐ
nodes.push({0 ,costs[0][0]});
while(!nodes.empty())
{
// ํ์ฌ ์ฌ๊ณผ ๊ฐ์ค์น ํ์์ ๊บผ๋ด๊ธฐ
int curNode = nodes.top().second;
int curWeight = nodes.top().first;
nodes.pop();
// ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ฌ์ด๋ฉด ๋์ด๊ฐ๋ค.
if(visited[curNode])
continue;
// ์ฌ ๋ฐฉ๋ฌธ, ๊ฐ์ค์น ํฉ์ฐ
visited[curNode] = true;
answer += curWeight;
for(int i = 0; i < costs.size(); ++i)
{
// ์ฐ๊ฒฐ๋ ์ฌ์ธ์ง ๊ฒ์ฆ (0๋ฒ ์ธ๋ฑ์ค, 1๋ฒ ์ธ๋ฑ์ค ์ด 2๋ฒ ๊ฒ์ฌ)
int idx = -1;
for(int n = 0; n < 2; ++n)
{
if(curNode == costs[i][n])
idx = !n;
}
// ์ฐ๊ฒฐ๋ ์ฌ์ด๋ผ๋ฉด ์ฐ์ ์์ ํ์ ์ฌ ์ถ๊ฐ
if(idx != -1)
{
if(!visited[costs[i][idx]])
{
nodes.push({costs[i][2], costs[i][idx]});
}
}
}
}
return answer;
}
ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ์ด ์ดํด๊ฐ ๋์ง ์์ ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๋ ๋ฌธ์ ์ ํ๊ณผ ๋น์ทํด์ ์ด๊ฒ๋ ์ธ๋ฑ์ค ์ฌ๊ธฐ์ ๊ธฐ ์ฎ๊ฒจ๊ฐ๋ฉฐ ํธ๋ ๋ฌธ์ ์ธ๊ฐ ํ๋๋
์๊ฐ๋ณด๋ค ์ ์์ ์ธ ์ต์์ ์ฅํธ๋ฆฌ ๋ฌธ์ ์๋ค.
์ต์์ ์ฅํธ๋ฆฌ ์๊ณ ๋ฆฌ์ฆ๋ง ์๋ฉด ์ฝ๊ฒ ํ ์ ์๋ ๋ฌธ์ ์ด๋ค.
'๐ฅ๏ธ Study Note > Coding Test' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ค๋ชฉ(C++) (0) | 2023.04.24 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค / level.1 / ์์ฐ์ ๋ค์ง์ด ๋ฐฐ์ด๋ก ๋ง๋ค๊ธฐ(C++) (1) | 2023.04.23 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ๊ตฌ๋ช ๋ณดํธ(C++) (0) | 2023.04.20 |
ํ๋ก๊ทธ๋๋จธ์ค / level.2 / ํฐ ์ ๋ง๋ค๊ธฐ(C++) (0) | 2023.04.18 |
ํ๋ก๊ทธ๋๋จธ์ค / level.3 / ์์ดํ ์ค๊ธฐ(C++) (0) | 2023.04.17 |