νλ‘κ·Έλλ¨Έμ€ / level.2 / λͺ¨μμ¬μ (C++)
https://school.programmers.co.kr/learn/courses/30/lessons/86971
λ¬Έμ μ€λͺ
nκ°μ μ‘μ νμ΄ μ μ μ ν΅ν΄ νλμ νΈλ¦¬ ννλ‘ μ°κ²°λμ΄ μμ΅λλ€. λΉμ μ μ΄ μ μ λ€ μ€ νλλ₯Ό λμ΄μ νμ¬μ μ λ ₯λ§ λ€νΈμν¬λ₯Ό 2κ°λ‘ λΆν νλ €κ³ ν©λλ€. μ΄λ, λ μ λ ₯λ§μ΄ κ°κ² λλ μ‘μ νμ κ°μλ₯Ό μ΅λν λΉμ·νκ² λ§μΆκ³ μ ν©λλ€.
μ‘μ νμ κ°μ n, κ·Έλ¦¬κ³ μ μ μ 보 wiresκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§λλ€. μ μ λ€ μ€ νλλ₯Ό λμ΄μ μ‘μ ν κ°μκ° κ°λ₯ν λΉμ·νλλ‘ λ μ λ ₯λ§μΌλ‘ λλμμ λ, λ μ λ ₯λ§μ΄ κ°μ§κ³ μλ μ‘μ ν κ°μμ μ°¨μ΄(μ λκ°)λ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- nμ 2 μ΄μ 100 μ΄νμΈ μμ°μμ λλ€.
- wiresλ κΈΈμ΄κ° n-1μΈ μ μν 2μ°¨μ λ°°μ΄μ
λλ€.
- wiresμ κ° μμλ [v1, v2] 2κ°μ μμ°μλ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, μ΄λ μ λ ₯λ§μ v1λ² μ‘μ νκ³Ό v2λ² μ‘μ νμ΄ μ μ μΌλ‘ μ°κ²°λμ΄ μλ€λ κ²μ μλ―Έν©λλ€.
- 1 ≤ v1 < v2 ≤ n μ λλ€.
- μ λ ₯λ§ λ€νΈμν¬κ° νλμ νΈλ¦¬ ννκ° μλ κ²½μ°λ μ λ ₯μΌλ‘ μ£Όμ΄μ§μ§ μμ΅λλ€.
μ μΆλ ₯ μ
n | wires | result |
9 | [[1,3],[2,3],[3,4],[4,5],[4,6],[4,7],[7,8],[7,9]] | 3 |
4 | [[1,2],[2,3],[3,4]] | 0 |
7 | [[1,2],[2,7],[3,7],[3,4],[4,5],[6,7]] | 1 |
μ μΆλ ₯ μ μ€λͺ
μ μΆλ ₯ μ #1
- λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ λ ₯μ ν΄κ²°νλ λ°©λ² μ€ νλλ₯Ό λνλΈ κ²μ λλ€.
- 4λ²κ³Ό 7λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ κ° 6κ°μ 3κ°μ μ‘μ νμ κ°μ§λ©°, μ΄λ³΄λ€ λ λΉμ·ν κ°μλ‘ μ λ ₯λ§μ λλ μ μμ΅λλ€.
- λ λ€λ₯Έ λ°©λ²μΌλ‘λ 3λ²κ³Ό 4λ²μ μ°κ²°νλ μ μ μ λμ΄λ μ΅μ μ μ λ΅μ λμΆν μ μμ΅λλ€.
μ μΆλ ₯ μ #2
- λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ λ ₯μ ν΄κ²°νλ λ°©λ²μ λνλΈ κ²μ λλ€.
- 2λ²κ³Ό 3λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ΄ λͺ¨λ 2κ°μ μ‘μ νμ κ°μ§κ² λλ©°, μ΄ λ°©λ²μ΄ μ΅μ μ λλ€.
μ μΆλ ₯ μ #3
- λ€μ κ·Έλ¦Όμ μ£Όμ΄μ§ μ λ ₯μ ν΄κ²°νλ λ°©λ²μ λνλΈ κ²μ λλ€.
- 3λ²κ³Ό 7λ²μ μ°κ²°νλ μ μ μ λμΌλ©΄ λ μ λ ₯λ§μ΄ κ°κ° 4κ°μ 3κ°μ μ‘μ νμ κ°μ§κ² λλ©°, μ΄ λ°©λ²μ΄ μ΅μ μ λλ€.
λ΄ ν΄λ΅
#include <string>
#include <vector>
#include <iostream>
#define MAX 101 // n : 2 ~ 100
using namespace std;
int graph[MAX][MAX]{}; // wires κ°μ μ μ₯
vector<bool> visited = vector<bool>(MAX, false); // μ‘μ ν λ°©λ¬Έ 체ν¬
int dfs(int cur, int n)
{
// μ΄λ―Έ λ°©λ¬Έν μ‘μ νμ΄λΌλ©΄ κ³μ°μ μ§ννμ§ μλλ€.
if(visited[cur]) return 0;
int link = 1; // μ°κ²° νμ
visited[cur] = true; // λ°©λ¬Έ 체ν¬
for(int i = 1; i <= n ; ++i)
{
if(graph[cur][i])
{
link += dfs(i, n);
}
}
return link;
}
int solution(int n, vector<vector<int>> wires) {
int answer = 102;
// μ΄κΈ°ν : μ‘μ ν x, y κ° μλ°© μ°κ²°λμ΄ μλ€λ κ²μ νμ
for(int i = 0; i < wires.size(); ++i)
{
int x = wires[i][0];
int y = wires[i][1];
graph[x][y] = graph[y][x] = 1;
}
for(int i = 0; i < wires.size(); ++i)
{
// κ°μ μ νλμ© λμ΄λ³Έλ€.
int x = wires[i][0];
int y = wires[i][1];
graph[x][y] = graph[y][x] = 0;
// λ°©λ¬Έ μ²΄ν¬ μ΄κΈ°ν
fill(visited.begin(),visited.end(),false);
// κ°μ μ νλμ© λμμ λ, μ°κ²°λ μ‘μ ν μλ₯Ό μ μ₯ν vector
vector<int> linked_node;
// μ°κ²°λ μ‘μ νμ μλ₯Ό dfsλ₯Ό μ¬μ©ν΄ κ³μ°νλ€.
for(int i = 1; i <= n; ++i)
{
int link = dfs(i, n);
if(!link)
continue;
linked_node.push_back(link);
}
// μ§κΈκΉμ§μ μ°¨μ΄κ°κ³Ό νμ¬ μ°¨μ΄κ° μ€μ λ μμ μͺ½μ μ μ₯νλ€.
int diff = abs(linked_node[0]-linked_node[1]);
answer = answer <= diff ? answer : diff;
// μ°¨μ΄κ° 0μΌλκ° μ΅μ μ κ²°κ³Όμ΄λ―λ‘ λ μ΄μ κ³μ°νμ§ μλλ€.
if(answer == 0) break;
// κ°μ μ λ€μ μ°κ²°νλ€.
graph[x][y] = graph[y][x] = 1;
}
return answer;
}
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘κ·Έλλ¨Έμ€ / level.3 / λ€νΈμν¬(C++) (0) | 2023.04.10 |
---|---|
νλ‘κ·Έλλ¨Έμ€ / level.2 / νκ² λλ²(C++) (0) | 2023.04.07 |
νλ‘κ·Έλλ¨Έμ€ / level.2 / λͺ¨μμ¬μ (C++) (0) | 2023.04.05 |
νλ‘κ·Έλλ¨Έμ€ / level.2 / λμ€ν¬ 컨νΈλ‘€λ¬(C++) (0) | 2023.04.04 |
νλ‘κ·Έλλ¨Έμ€ / level.2 / λ λ§΅κ²(C++) (0) | 2023.04.02 |