https://school.programmers.co.kr/learn/courses/30/lessons/49189
๋ฌธ์ ์ค๋ช
n๊ฐ์ ๋ ธ๋๊ฐ ์๋ ๊ทธ๋ํ๊ฐ ์์ต๋๋ค. ๊ฐ ๋ ธ๋๋ 1๋ถํฐ n๊น์ง ๋ฒํธ๊ฐ ์ ํ์์ต๋๋ค. 1๋ฒ ๋ ธ๋์์ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ ธ๋์ ๊ฐฏ์๋ฅผ ๊ตฌํ๋ ค๊ณ ํฉ๋๋ค. ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ ธ๋๋ ์ต๋จ๊ฒฝ๋ก๋ก ์ด๋ํ์ ๋ ๊ฐ์ ์ ๊ฐ์๊ฐ ๊ฐ์ฅ ๋ง์ ๋ ธ๋๋ค์ ์๋ฏธํฉ๋๋ค.
๋ ธ๋์ ๊ฐ์ n, ๊ฐ์ ์ ๋ํ ์ ๋ณด๊ฐ ๋ด๊ธด 2์ฐจ์ ๋ฐฐ์ด vertex๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, 1๋ฒ ๋ ธ๋๋ก๋ถํฐ ๊ฐ์ฅ ๋ฉ๋ฆฌ ๋จ์ด์ง ๋ ธ๋๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- ๋ ธ๋์ ๊ฐ์ n์ 2 ์ด์ 20,000 ์ดํ์ ๋๋ค.
- ๊ฐ์ ์ ์๋ฐฉํฅ์ด๋ฉฐ ์ด 1๊ฐ ์ด์ 50,000๊ฐ ์ดํ์ ๊ฐ์ ์ด ์์ต๋๋ค.
- vertex ๋ฐฐ์ด ๊ฐ ํ [a, b]๋ a๋ฒ ๋ ธ๋์ b๋ฒ ๋ ธ๋ ์ฌ์ด์ ๊ฐ์ ์ด ์๋ค๋ ์๋ฏธ์ ๋๋ค.
๊ทธ๋ํ ํ์ ๋ฌธ์ ์ ๋๋ค
๊ฐ์ฅ ๋จผ ๋ ธ๋๋ฅผ ๋ฌผ์ด๋ดค์ผ๋ฏ๋ก, ์ผ๋จ matrix์ ๋ฃ๊ณ ๋ฌด์ง์ฑ bfs ์คํ.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ ธ๋๊น์ง ๊ฐ๋ ค๋ฉด ๋ช ๊ฐ์ ๋ ธ๋๋ฅผ ๊ฑฐ์ณ์ผ ํ๋์ง answer ๋ฐฐ์ด์ ์ ์ฅํ์์ต๋๋ค.
bfs ํ์์ด ์ข ๋ฃ๋ ํ, answer์ ์ ๋ ฌํ๊ณ ์ต๋๊ฐ์ด ๋ช ๊ฐ์ธ์ง ์ธ์ด๋ณด๋ฉด ๋!
๋์ ํ์ด
#include <string>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int mat[20001][20001]={0};
int visited[20001]={0};
int answer[20001]={0};
int cnt=0;
bool canGo(int a, int i){
if(visited[i]==1) return false;
if(mat[a][i]==0) return false;
return true;
}
void bfs(int n){
queue<int> q;
q.push(1);
visited[1] = 1;
answer[1] = 1;
while(!q.empty()){
int a = q.front();
q.pop();
for(int i=1; i<=20000; ++i){
if(canGo(a,i)){
visited[i] = 1;
q.push(i);
answer[i] = answer[a]+1;
}
}
}
sort(answer, answer+20001);
int amax = answer[20000];
for(int i=20000; i>=0; --i){
if(answer[i] == amax) cnt++;
else break;
}
}
int solution(int n, vector<vector<int> > edge) {
int ES = edge.size();
for(int i=0; i<ES; ++i){
mat[edge[i][0]][edge[i][1]] = 1;
mat[edge[i][1]][edge[i][0]] = 1;
}
bfs(n);
return cnt;
}
๋ฟ-๋ฏ
'๐ ์๊ณ ๋ฆฌ์ฆ > Programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[C++/PGS] Lv.3 : N์ผ๋ก ํํ (DP) (0) | 2023.03.03 |
---|---|
[C++/PGS] Lv.3 : ์์ (๊ทธ๋ํ/Floyd-Warshall) (1) | 2023.03.03 |
[C++/PGS] Lv.2 : H-index (์ ๋ ฌ) (0) | 2023.03.03 |
[C++/PGS] Lv.2 : ์นดํซ (์์ ํ์) (0) | 2023.03.03 |
[C++/PGS] Lv.2 : ์์ ์ฐพ๊ธฐ (์์ ํ์) (0) | 2023.03.03 |