https://www.acmicpc.net/problem/2458
2458๋ฒ: ํค ์์
1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋ถ์ฌ์ ธ ์๋ ํ์๋ค์ ๋ํ์ฌ ๋ ํ์๋ผ๋ฆฌ ํค๋ฅผ ๋น๊ตํ ๊ฒฐ๊ณผ์ ์ผ๋ถ๊ฐ ์ฃผ์ด์ ธ ์๋ค. ๋จ, N๋ช ์ ํ์๋ค์ ํค๋ ๋ชจ๋ ๋ค๋ฅด๋ค๊ณ ๊ฐ์ ํ๋ค. ์๋ฅผ ๋ค์ด, 6๋ช ์ ํ์๋ค์ ๋ํ์ฌ
www.acmicpc.net
https://codeup.kr/problem.php?id=4714
ํค ์์
๋ฌธ์ 4) ํค ์์ 1๋ฒ๋ถํฐ N๋ฒ๊น์ง ๋ฒํธ๊ฐ ๋ถ์ฌ์ ธ ์๋ ํ์๋ค์ ๋ํ์ฌ ๋ ํ์๋ผ๋ฆฌ ํค๋ฅผ ๋น๊ตํ ๊ฒฐ๊ณผ์ ์ผ๋ถ๊ฐ ์ฃผ์ด์ ธ ์๋ค. ๋จ, N๋ช ์ ํ์๋ค์ ํค๋ ๋ชจ๋ ๋ค๋ฅด๋ค๊ณ ๊ฐ์ ํ๋ค. ์๋ฅผ ๋ค์ด, 6๋ช ์
codeup.kr
#1 ์์
์ฝ๋์
BFS/DFS ๋ฌธ์ ์ง์ ์ฑ๊ณต๋ฅ ์์ผ๋ก ์ ๋ ฌํด ์ง๋ขฐ์ฐพ๊ธฐ2๊น์ง ํธ๋ ๋์ ๊ณ์ ๋ชปํ์๋ ๋ฌธ์ ,,,
๋๋ฆ ์ด๋ ๊ฒ ์ ๋ ๊ฒ ํ์ด๋ฅผ ์ธ์ ๋๋ฐ, ๋๋์ฒด ์ด๋ป๊ฒ ๊ตฌํํด์ผํ ์ง ๋ง๋งํด์ ์๋๊ณ ์์๋ค.
ํ๋ก์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ์ ์์์ผ ํ์ ์๋ค๋๋ฐ, ํ๋ฃจ์ด๋ ์์
์ DP์ ๊ฐ๊น์ด ์๊ณ ๋ฆฌ์ฆ์ด๋ผ ์์ง ๊ฑด๋๋ฆฌ๊ณ ์ถ์ง ์์๋ค.
๊ทธ๋ฆฌ๊ณ ์ฒ์์ ์ธ์ด ํ์ด๋ ํ๋ฃจ์ด๋ ์์
์ ์ฐ์ง ์์๊ธฐ ๋๋ฌธ์, ์ด๋ป๊ฒ๋ ํ ์๋ ์์๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค๊ฐ ๋์ ํ ๋ชปํ๊ฒ ์ด์
๊ตฌ๊ธ์ ์ ๋์์ ์ฒญํ๋ ์ค, ๋์ ํ์ด๋ฒ์ด ๋๊ฐ์ ๋ถ์ ์ฝ๋๋ฅผ ๋ง๋๊ฒ ๋์๋ค.
๊ฒฐ๊ตญ ํด๊ฒฐํ๊ณ , ์ฐธ ์ป์ด๊ฐ๋ ๊ฒ์ด ๋ง์๋ ๋ฌธ์ .
#2 ์ ๊ทผ
์์ ์ ํค๊ฐ ๋ช๋ฒ์งธ์ธ์ง ์ ์ ์๋ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค.
์์ ๋ณด๋ค ํฐ ํ์ ์ + ์์ ๋ณด๋ค ์์ ํ์ ์ = ์ ์ฒดํ์์ - 1
์์ ๋ณด๋ค ์์ ํ์ ์๋ DFSํ์์ ์คํํ๋ฉด ๋ ๊ฒ ๊ฐ์๋ค.
์ต์ด์ ๋ฐฉ๋ฌธ์ ๋
ธ๋์ 0์, ๊ทธ ๋ค์ ๋ฐฉ๋ฌธํ ๋
ธ๋์ 1์, ๊ทธ ๋ค์ ๋ฐฉ๋ฌธํ ๋
ธ๋์ ์ด์ ๋
ธ๋๊ฐ+1 ์ ํด์ ์ญ์ญ์ญ....
๊ทธ๋ ๊ฒ ๋ค์ด์ค๋ ๊ฐ์ ์ด ์๋ ๋
ธ๋๋ค์ ์์์ผ๋ก ํ์ํ๊ณ ๋๋ฉด ๋ชจ๋ ํ์์ด ์์ ๋ณด๋ค ์์ ํ์ ์๊ฐ ๋ช๋ช
์๋์ง ์ ์ ์๋ค.
(์ด๋๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ์๊ฒฝ์ฐ๋ ์ด๋ป๊ฒ ์ฒ๋ฆฌํด์ผํ๋์ง์ ๋ํ ์๊ฐ์ ๊ฐ์ด ์ฎ์ด์ ์๊ฐ์น๋ ๋ชปํ๋ค)
์ด๋ ๋ฌธ์ ๋ ์ต์ด์ ๋ฐฉ๋ฌธํ ๋
ธ๋๋ค์ ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋๋ฐ, ์
๋ ฅ๋ฐ์๋ ์ด๋ค ์ ์ ์ ์ฐ๊ฒฐ๋๋ ๊ฐ์ ๋ค์ ๊ธฐ๋กํด ๋ค์ด์ค๋ ๊ฐ์ ์ด ์๋ค๋ฉด ๋ฐฉ๋ฌธํ ๋
ธ๋๋ก ์ค์ ํ๋ค..๋ญ ์ด๋ฐ ์์ด๋์ด๋ฅผ ๋์๋๋ฐ, ์ด๊ฒ ๋ง์๊น? ๊ตฌํํ๋ฉด ์ด๊ฒ ๋ง๊ฒ ์ง๋ง ใ
ใ
๋๋ฌด ๋ง ํธ๋ ๋๋์ด ๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ ์์ ๋ณด๋ค ํฐ ํ์ ์๋ฅผ ๊ตฌํ๋๊ฑด ์ด๋ป๊ฒ ํ ๊ฒ์ด๋๋ ๋๋ฒ์งธ ๋ฌธ์ ์ ๋งํ๋๋ฐ, ๊ฐ์ ์ ๋ฐฉํฅ์ ๋ค์ง์ด ์ญ๋ฐฉํฅ์ผ๋ก DFS๋ฅผ ํ์ํ๋ฉด ๊ตฌํ ์ ์๋ค๋๊ฑธ ์ฐพ์๋์ง๋ง ใ
ใ
,,, ๊ทธ๋ฌ๋ฉด ํจ์๋ ๋ฐ๋ก๋ง๋ค๊ณ , ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ ์ด๋ป๊ฒ ํด์ผํ๋์ง,,,,
ํ๋ฒ์ ํ๋ ๋ฐฉ๋ฒ์ ์ ๋ง ์์๊น? ์ด๋๋ก ํ๋ก์ด๋ ์์
์๊ณ ๋ฆฌ์ฆ์ ์จ์ผ๋ง ํ๋ ๊ฒ์ธ๊ฐ..?
ํ๋ ์๊ฐ์ ๋ฌธ์ ๋ฅผ ์์ ํ ๋์ผ๋ ค๊ณ ํ ๋ ์ฏค! ์ด๋ถ์ ๊ธ์ ๋ฐ๊ฒฌํ๋ค.
#3 ๊ตฌํ
์๋ฐ๋ก ๊ตฌํํด๋์ ์ฝ๋๋ฅผ ๋ณด๋ฉฐ, ์ด๋ป๊ฒ ๋์ํ๋๊ฒ์ผ๊น ๋๋๋๋ฉฐ ์ดํผ๋ค ์ ๊น ์ ๊ณ ์๋ก๋์จ ๋ฏผ์ด๋ง ๋ค์ด์ ๋ฅผ ๋จน์ผ๋ฉฐ ์ ์ ๋จธ๋ฆฌ๋ฅผ ์ํํ์ด๋ฐ์์ผ๋ก ํ ์๋ ์๊ตฌ๋ ๋ผ๋ ํฐ ๊นจ๋ฌ์์ ์ป์๋ค. ์ ๋ง ์์์น๋ ๋ชปํ๋ ๋ฐฉ๋ฒ,,,ใ
ใ
์ ์ฝ๋๋ฅผ ๋ณด์.
for (int i = 0; i < M; ++i) {
int tmp1, tmp2;
cin>>tmp1>>tmp2;
stu[tmp1].push_back(tmp2);
}
๋จผ์ ์ ๋ ฅ๋ถ์ด๋ค. ์ธ์ ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๊ณ , ํ์ ํด๋นํ๋ ์ ์ ์์ ๋ป๋ ์ ์ ์ ์ฝ์ ํด์คฌ๋ค.
int DFS(int v,int visited[]){
int front = 0;
for (int i = 0; i < stu[v].size(); ++i) {
int next = stu[v][i];
if(visited[next]){
continue;
}
back[next]++;
visited[next] = 1;
front += DFS(next, visited);
}
return front + 1;
}
๋ค์์ผ๋ก ํ์๋ถ๋ฅผ ์ดํด๋ณด์. ํ๋ฒํ DFS๊ตฌ์กฐ๋ค. ๋จ, ๋จ๋ฐฉํฅ ๊ทธ๋ํ์๋ค๊ฐ ์์ ๋ณด๋ค ํฐ ์ ์ ๊ณผ ์ฐ๊ฒฐ๋ ์ํ์์ ๊ทธ ์ ์ ๋ณด๋ค ํฐ ์ ์ ์ด ๋ค์ ๊ทธ๋ณด๋ค ์์ ์ ์ ์ผ๋ก ๊ฐ์ ์ด ๋ป๋ ๊ฒฝ์ฐ๋ ์๊ธฐ๋๋ฌธ์ visited๋ ๋จ์ง ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ง ํ์ธํ๋ ์ฉ๋๋ก ์ผ๋ค.
ํ๋ฒ ๋ฐฉ๋ฌธํ ์ ์ ์, ๋ค์ ๋ฐฉ๋ฌธํ ์๋ ์์ง๋ง ์นด์ดํธ๋ ์ค๋ฅด๋ฉด ์๋๋ค.
์ฆ, ํน์ ์ ์ ์์ ๊น์ด์ฐ์ ํ์์ ์ํํด ๋ป์ด๋๊ฐ๋ ๋ชจ๋ ์ ์ ๋ค์ ๋ํด ํ๋ฒ์ฉ ์นด์ดํฐ๋ฅผ ์๊ณ , ์ด๋ฅผ ๋ชจ๋ ์ ์ ์ ๋ํด ์ํํ๋ ๊ฒ์ด๋ค.
front ๋ณ์๋ ์์ผ๋ก ํ์ํ๋ ์ ์ , ์ฆ ์์ ๋ณด๋ค ํฐ ํค์ธ ํ์ ์๊ฐ ๋ช๋ช
์๋์ง ์ธ๋ ๋ณ์๋ค.
์ด๋ฌ๋ฉด ์์ ์ด ๋ป์ ์ ์ ๊ณผ, ๊ทธ ์ ์ ์ ์ฐ๊ฒฐ๋ ์ ์ ์ ์๋ฅผ ์ ์ฅํ๋ ๊ฒ๊ณผ ๊ฐ๊ธฐ๋๋ฌธ์ ์์ ๋ณด๋ค ํค๊ฐ ํฐ ํ์์๋ฅผ ์ธ๋๊ฒ๊ณผ ๊ฐ๋ค.
ํจ์๊ฐ ๋๋ ๋ front+1๋ก ๋๋๋๋ฐ, ์ฌ๊ท๊ฐ ๋๋๊ณ ๋๋์์ค๋ฉฐ ์ฒซ ํธ์ถ ํจ์๊ฐ ๋๋ ๋ ์ฌ๊ท๊ตฌ์กฐ๋ฅผ ์์ฑ์ํค๋ ค๊ณ ์ฒ์๋ถํฐ 1์ ๋ํ์ผ๋ฏ๋ก ์ ์ฅํ ๋๋ 1์ ๋นผ๊ณ ์ ์ฅํ๋ค. (์๊ธฐ ์์ ์ ์๊ธฐ ์์ ๋ณด๋ค ํฌ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.)
์ด๊ฒ์ ๋ณด๊ณ ์ ๋ง ํฌ๊ฒ ๊ฐํํ๋ค....!
for (int i = 1; i < N+1; ++i) {
int visited[500]={0,};
front[i] = DFS(i, visited) - 1;
}
๊ทธ๋ฌํ ์ฐ๊ณ ๋ก ์ํ๋ถ๋ ์ด๋ ๋ค.
๋ฐฉ๋ฌธ ๋ฐฐ์ด์ ํจ์๊ฐ ์์ํ ๋ ๋ง๋ค ์ด๊ธฐํ๋๋ค.
์ ์ ์ ์์ ์์ํด ์ด๋ฏธ ๋ฐฉ๋ฌธํ ์ ์ ์, ์ด๋ฒ ์ ์ ์
์ฅ์์ ์์ง ๋ฐฉ๋ฌธํ ์ ์ ์ด ์๋๊ธฐ ๋๋ฌธ์ ^^...
ํ์ด๋ณด๋ฉด ๋ฌด์จ ๋ง์ธ์ง ์๊ฒ์ด๋ค.
for (int i = 1; i < N + 1; ++i) {
if(front[i] + back[i] == N - 1){
answer++;
}
}
์ด์ ์ฒ์์ผ๋ก ๋์์์, ์์ ๋ณด๋ค ํฐ ํ์ ์ + ์์ ๋ณด๋ค ์์ ํ์ ์ = ์ ์ฒดํ์์ - 1 ๋ฅผ ๋ง์กฑํ๋ ๊ฒฝ์ฐ๋ฅผ ์ผ ํ์, ๋ฆฌํดํด์ฃผ๋ฉด ๋!
#4 ๋ง๋ฌด๋ฆฌ
๊ทธ๋ฆฌ๊ณ ๋ฌธ์ ๋ฅผ ํผ ํ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํ ์ ๋ ์์ ๋ง๋งํ๊ฒ ์ ์ถ์ ๋๋ ์ง๋ง..
๋๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋๋ฆ ์๊ฒฉํ ํธ์ด๋ผ, ์ ์ฐํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์์ ๊ณต๊ฐ์ ํ ๋นํ๋ค.
์ด๋ฌ๋ฉด ์ต์
์ ์ํฉ์ด๋ ์๋๋ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ผ๋ง๋ ํ ๋น๋๋์ง ์ฒดํฌํ ์ ์๊ธฐ ๋๋ฌธ.
๋ฌธ์ ๋ ๋ด ์ฝ๋์ ์์๋ค.
int N,M;
vector<int> stu[250 * 499];
int back[500] = {0, };
int front[500] = {0, };
๊ทธ๋ฆฌ๊ณ ์ด ๋ฌธ์ ๋ ์ธ๋ฑ์ค๋ฅผ 0๋ฒ์ด ์๋ 1๋ฒ๋ถํฐ ํ ๋นํ๋, ๊ณต๊ฐ์ 500์ด ์๋๋ผ 501 ์ด์ ํ ๋นํด์ฃผ์์ด์ผ ํ๋ค. ใ ใ ....
์ธ๊ทธ๋จผํธ ์ค๋ฅ๊ฐ ๋จ์ง ์๊ณ , ํ๋ฆฐ ํ์ด๋ผ๊ณ ๋ ์ ๋นํฉํ์ง๋ง ์
๋ ฅ๋ถ๋ฅผ ๋ณด๊ณ ์์ฐจ ์ถ์๋ค.
์๋ง ์ฝ๋์
์ด ์๋๋ผ ๋ฐฑ์ค์ด์๋ค๋ฉด ์ก๋๋ฐ ํ์ฐธ ๊ฑธ๋ ธ์ ๊ฒ์ด๋ค.
DFS์์ ์นด์ดํฐ๋ฅผ ์ด์ฉํ๋ฉด ๋ฐฉ๋ฌธํ ์ ์ ์ ๊ฐ์๋ฅผ ์์ ์๋ค๋ ์ , ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํญ์ ์ ์ํด์ผ ํ๋ค๋ ์ !
๊ผญ๊ผญ ์์ง ๋ง์.
'learnings > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1918 ํ์ ํ๊ธฐ์ (0) | 2024.04.05 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ๋คํธ ๊ฒ์ (0) | 2024.04.01 |
[PS/ํ์/BFS/DFS] ์ฌ๊ธฐ์ ๊ธฐ ์ด๊ณณ์ ๊ณณ ํ์ํ์ 2 (0) | 2021.07.19 |
[PS/ํ์/BFS/DFS] ์ฌ๊ธฐ์ ๊ธฐ ์ด๊ณณ์ ๊ณณ ํ์ํ์ (0) | 2021.07.18 |
[PS/๊ทธ๋ฆฌ๋/ํ๋ก๊ทธ๋๋จธ์ค] ์ฒด์ก๋ณต (0) | 2021.07.02 |