- ์น๋ฆฐ์ด
- ์ํฐ๋
- ๊ฐ์ฅ๊ฐ๊น์ด๊ณตํต์กฐ์
- LCs
- ์นด์นด์ค ์ฝํ
- Python
- ์ด๋ถํ์
- ์นด์นด์ค2021
- ๋ฐฑ์๋ ํ๋ฆฌ์จ๋ณด๋ฉ
- nestjs
- ์์ฝ๋
- ์ฌ๊ท
- golang
- ๋ค์ต์คํธ๋ผ
- DFS
- ํ๋ฆฌ์จ๋ณด๋ฉ
- C++
- ๋นํธ๋งต
- ์๊ณ ๋ฆฌ์ฆ
- ์ฌ๋ผ์ด๋ฉ ์๋์ฐ
- ๋นํธ๋ง์คํน
- js
- ํ๋ก๊ทธ๋๋จธ์ค
- BFS
- ํธ๋ฆฌ
- ๋ฐฑ์ค
- Union-Find
- ๋์ ํ๋ก๊ทธ๋๋ฐ
- go
- DP
- Today
- Total
Hello Ocean! ๐ผ
[๋ฐฑ์ค/C++] 1405. ๋ฏธ์น ๋ก๋ด ๋ณธ๋ฌธ
๋ฌธ์
https://www.acmicpc.net/problem/1405
๋ก๋ด์ด 4๋ฐฉํฅ (๋์๋จ๋ถ)์ผ๋ก ๊ฐ๊ฐ ์ด๋ํ ํ๋ฅ ๊ณผ, ์ด๋ ํ์๊ฐ ์ฃผ์ด์ง ๋
๋ก๋ด์ด ํ ๋ฒ ๋ฐฉ๋ฌธํ ๊ณณ์ ๋ค์ ๋ฐฉ๋ฌธ ํ์ง ์์ ํ๋ฅ ์ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
ํ์ด
๊ฐ๋ฅํ ๋ชจ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ฉด์ ์ด์ ์ ๋ฐฉ๋ฌธํ๋ ์นธ์ ๋ค์ ๋ฐฉ๋ฌธํ์ง ์์ ์ด๋๊ฒฝ๋ก์ ํ๋ฅ ์ ๊ตฌํด์ ๋ชจ๋ ๋ํ๋ฉด ๋๋ค.
DFS๋ก ํ์๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋ฐฑํธ๋ํน์ด๋ผ๊ณ ํ๋ค..?
๋ด๊ฐ ์ดํดํ๊ธฐ๋ก๋ N๋ฒ ์ด๋ํ๋ ๊ฑธ ํ์ํ๋ค๊ณ ํ ๋
๋งค๋ฒ ๊ธธ์ด N๋งํผ ๋๊น์ง ํ์ํ๋ฉด DFS, ์ค๊ฐ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ case๋ฅผ ๋ฒ๋ฆฌ๊ณ ํ์ํ์ง ์๋ ๊ฒ์ ๋ฐฑํธ๋ํน์ด๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค.
DFS๋ก ํ์ํ๋ฉด์, ์ค๊ฐ์ visited๋ฐฐ์ด ๊ฐ์ด 1์ธ ๊ณณ์ ๋ฐฉ๋ฌธํ๋ฉด ํ์์ ์ข ๋ฃํ๋ค. ์ด๋์ N๋ฒ ํ์ ๋, (N๋ฒ ๋์ ์ค๋ณต ๋ฐฉ๋ฌธ์ด ์์์) ํด๋น ์ด๋ ๊ฒฝ๋ก์ ํ๋ฅ ์ result์ ๋ํ๋ค.
์ฝ๋
#include <cstdio>
#include <iostream>
#define sc scanf
using namespace std;
bool visited[29][29]; // 14+1+14 = 29
int N;
double per[4];
int dr[4] = { 0,0,1,-1 }; // E W S N
int dc[4] = { 1,-1,0,0 };
double result = 0;
void DFS(int startR, int startC, int n, double p) {
if (n == N) {
result += p;
return;
}
for (int i = 0;i < 4;i++) {
int nextR = startR + dr[i];
int nextC = startC + dc[i];
if (visited[nextR][nextC]) continue;
visited[nextR][nextC] = 1;
DFS(nextR, nextC, n + 1, p * per[i]);
visited[nextR][nextC] = 0;
}
}
int main() {
sc("%d", &N);
for (int i = 0;i < 4;i++) {
sc("%lf", &per[i]);
per[i] /= 100.0;
}
visited[14][14] = 1;
DFS(14,14, 0, 1);
printf("%.10lf\n", result);
return 0;
}
๊ฒฐ๊ณผ
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค/C++] 17370. ์ก๊ฐํ ์ฐ๋ฆฌ ์์ ๊ฐ๋ฏธ (0) | 2021.08.24 |
---|---|
[๋ฐฑ์ค/C++] 1941. ์๋ฌธ๋ ์น ๊ณต์ฃผ (0) | 2021.08.24 |
[๋ฐฑ์ค/C++] 17182. ์ฐ์ฃผ ํ์ฌ์ (0) | 2021.08.17 |
[๋ฐฑ์ค/C++] 1062. ๊ฐ๋ฅด์นจ (0) | 2021.08.10 |
[๋ฐฑ์ค/C++] 18119. ๋จ์ด ์๊ธฐ (0) | 2021.08.10 |