https://www.acmicpc.net/problem/1058
๋ฌธ์
์ง๋ฏผ์ด๋ ์ธ๊ณ์์ ๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋์ด ๋๊ตฌ์ธ์ง ๊ถ๊ธํด์ก๋ค. ๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๊ฐ ์ฌ๋์ 2-์น๊ตฌ๋ฅผ ๊ตฌํ๋ฉด ๋๋ค. ์ด๋ค ์ฌ๋ A๊ฐ ๋๋ค๋ฅธ ์ฌ๋ B์ 2-์น๊ตฌ๊ฐ ๋๊ธฐ ์ํด์ , ๋ ์ฌ๋์ด ์น๊ตฌ์ด๊ฑฐ๋, A์ ์น๊ตฌ์ด๊ณ , B์ ์น๊ตฌ์ธ C๊ฐ ์กด์ฌํด์ผ ๋๋ค. ์ฌ๊ธฐ์ ๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋์ 2-์น๊ตฌ์ ์๊ฐ ๊ฐ์ฅ ๋ง์ ์ฌ๋์ด๋ค. ๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋์ 2-์น๊ตฌ์ ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
A์ B๊ฐ ์น๊ตฌ๋ฉด, B์ A๋ ์น๊ตฌ์ด๊ณ , A์ A๋ ์น๊ตฌ๊ฐ ์๋๋ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์ฌ๋์ ์ N์ด ์ฃผ์ด์ง๋ค. N์ 50๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ฐ์์ด๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฐ ์ฌ๋์ด ์น๊ตฌ์ด๋ฉด Y, ์๋๋ฉด N์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ๊ฐ์ฅ ์ ๋ช ํ ์ฌ๋์ 2-์น๊ตฌ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ด๋ฆผ๋ ์๋ ํ์ด 1
๊ฒน์ง์ธ์.. ์๊ฐํ์ง ๋ชปํ๋ค.. ์์ 3๋ฒ๋ง ๋ณด๊ณ .. ์ ๋๊ฒ ํ์๋ค
์์ 1๋ ํ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ง๋ค์๋ค
#include <iostream>
#include <vector>
using namespace std;
int main() {
//์ธํ
int n;
cin >> n;
vector <int> arr[n];
int one[n], two[n];
//์
๋ ฅ
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
char tmp;
cin >> tmp;
if(tmp == 'Y'){
arr[i].push_back(j);
}
}
}
//1-์น๊ตฌ ์ ๊ตฌํด์ ๋ฐฐ์ด์ ๋ฃ๊ธฐ
for(int i=0; i<n; i++){
one[i] = arr[i].size();
}
//2-์น๊ตฌ ์ ๊ตฌํด์ ๋ฐฐ์ด์ ๋ฃ๊ธฐ
for(int i=0; i<n; i++){
two[i] = one[i]; //2-์น๊ตฌ๋ ๋ณธ์ธ์ 1-์น๊ตฌ ์ +
for(int j=0; j<arr[i].size(); j++){
two[i] += one[i] - 1; // + ๋ณธ์ธ์ 1์น๊ตฌ๋ค์ 1์น๊ตฌ ์ -1
}
}
//์ถ๋ ฅ
int tmp = 0;
for(int i=0; i<n; i++){
if(tmp < two[i])
tmp = two[i];
}
cout << tmp;
return 0;
}
์ด๋ฆผ๋์๋ํ์ด 2
DFS๋ก ํ์๋ค.
์์ ๋ ๋ค ํ๋ฆผ
๊ทผ๋ฐ ์ ํ๋ ธ์ต๋๋ค๋๊ณ
#include <iostream>
#include <algorithm>
using namespace std;
int n; //์ฌ๋ ์
bool arr[51][51] = {false}; //์น๊ตฌ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ธ์ ๋ฐฐ์ด
bool visited[51]; //๋ฐฉ๋ฌธํ ๋
ธ๋ ํ์ํ๊ธฐ
int ans[51] = {0}; //i๋ฒ์งธ ์ฌ๋์ 2-์น๊ตฌ ์
//๊น์ด 2๊น์ง ๋์๊ฐ๋ dfs
void dfs (int level, int i){
visited[i] = true;
if(level == 2) return;
for(int j=0; j<n; j++){
if(arr[i][j] && !visited[j]){ //์ธ์ ํ๋ฐ ๋ฐฉ๋ฌธ ์๋์ด์์ผ๋ฉด
dfs(level+1, j);
}
}
}
int main() {
//์
๋ ฅ๋ฐ๊ธฐ
cin >> n;
char tmp;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> tmp;
if(tmp == 'Y') arr[i][j] = true;
}
}
//๊ฐ ์ฌ๋์์ ์ถ๋ฐํด์
for(int i=0; i<n; i++){
//์ด๊ธฐํํ๊ณ
int cnt = 0;
for(int j=0; j<51; j++){
visited[j] = false;
}
//๊น์ด 2๋งํผ dfs ๋๋ฆฌ๊ณ
dfs(0,i);
//๋ฐฉ๋ฌธ ํ์๋ ๋
ธ๋ ๊ฐ์ ์ธ๋ฉด
for(int j=0; j<n; j++){
if(visited[j])
cnt++;
}
//2-์น๊ตฌ ์๊ฐ ๋์ด
ans[i] = cnt-1; //๋ณธ์ธ์ ๋นผ์ผํจ (-1)
}
//๋ต ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ์ ๊ณ ๋ฅด๊ธฐ
sort(ans, ans+51);
cout << ans[50];
return 0;
}
https://www.acmicpc.net/board/view/44710
๋๋ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํธ์ ๋ถ์ ์ง์์๋ต์ ๋ณด๊ณ ์์๋ค..
๊ธฐ๊ฐ๋งํ๊ฒ ์ฌ๊ธฐ ๋ต๋ณ์๋ถ๊ป์ ์ ์ํด์ฃผ์ ์์ ๊ฐ ๋ฑ ํ๋ฆฌ๋๋ผ....
์๊ณ ๋ณด๋
๋ฐฉ๋ฌธ์ฒ๋ฆฌ๊ฐ ๋์ด๋ฒ๋ฆฌ๋ฉด bfs๋ฅผ ๋๋ฆฌ๋ค๊ฐ ๋ฉ์ถ๊ณ ์์๋ค
๊ทธ๋์..
(์ง์ง) ํ์ด
๋ฐฉ๋ฌธ์ฒ๋ฆฌ ์์ด ์ธ์ ๋ฐฐ์ด์ ๋ค ๋ ์ ์๊ฒ ๋ฒกํฐ๋ก ๋ฐ๊ฟจ๋ค
๊ทธ๋ฆฌ๊ณ .. ์ด๊ฑด BFS ๋ ์๋๊ณ DFS ๋ ์๋
๋ญ๊ฐ ๋์ด ์์ธ
์ค๋ฌํ... ์ด์ํ ์ ๊ฐ ๋์๋ค
๋์ถฉ B๋ D ์ฌ์ด์ ์๋ ํ์ด๋ฒ์ด๋
CFS ๋ผ๊ณ ํ์ ใ ใ ใ
ํ ์์ด BFS ๊ตฌํํ ๋๋..?!
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n; //์ฌ๋ ์
vector <int> arr[51]; //์น๊ตฌ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ์ธ์ ๋ฐฐ์ด
bool visited[51]; //๋ฐฉ๋ฌธ์ฌ๋ถ
int ans[51] = {0}; //i๋ฒ์งธ ์ฌ๋์ 2-์น๊ตฌ ์
//๊น์ด 2๊น์ง ๋์๊ฐ๋ dfs
void dfs (int level, int i){
visited[i] = true;
if(level == 2) return;
for(int j=0; j<arr[i].size(); j++){
dfs(level+1, arr[i][j]);
}
}
int main() {
//์
๋ ฅ๋ฐ๊ธฐ
cin >> n;
char tmp;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> tmp;
if(tmp == 'Y') arr[i].push_back(j);
}
}
//๊ฐ ์ฌ๋์์ ์ถ๋ฐํด์
for(int i=0; i<n; i++){
//์ด๊ธฐํํ๊ณ
int cnt = 0;
for(int j=0; j<51; j++){
visited[j] = false;
}
//๊น์ด 2๋งํผ dfs ๋๋ฆฌ๊ณ
dfs(0,i);
//๋ฐฉ๋ฌธ ํ์๋ ๋
ธ๋ ๊ฐ์ ์ธ๋ฉด
for(int j=0; j<n; j++){
if(visited[j])
cnt++;
}
//2-์น๊ตฌ ์๊ฐ ๋์ด
ans[i] = cnt-1; //๋ณธ์ธ์ ๋นผ์ผํจ (-1)
}
//๋ต ๋ฐฐ์ด์์ ๊ฐ์ฅ ํฐ ์ ๊ณ ๋ฅด๊ธฐ
sort(ans, ans+51);
cout << ans[50];
return 0;
}
๊ทธ๋ฆฌ๊ณ ...
๊ทธ๋ฅ ์ฌ๋ฆฌ๋ ์์๋ณผ์์๋ ํ์ด๋ค
'๐ฆ Chango > ๐ฃ EDOC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Segfault][BOJ][C++] ๋ฐฑ์ค 1753๋ฒ : ์ต๋จ๊ฒฝ๋ก (0) | 2021.11.16 |
---|---|
[BOJ][C++] ๋ฐฑ์ค 11256๋ฒ: ์ฌํ (0) | 2021.11.16 |
[BOJ][C++] 16395๋ฒ: ํ์คํฌ์ ์ผ๊ฐํ (0) | 2021.11.03 |
[BOJ][C++] ๋ฐฑ์ค 2670๋ฒ: ์ฐ์๋ถ๋ถ์ต๋๊ณฑ (0) | 2021.11.03 |
[BOJ][C++] ๋ฐฑ์ค 2204๋ฒ: ๋๋น์ ๋๋ ์ฆ ํ ์คํธ (0) | 2021.11.02 |