[백준] 1405 미친 로봇
업데이트:
백준 1405 미친로봇 문제 풀이입니다.
이 문제를 첨에 딱 봤을땐 이해하기 너무 어려웠다. 왜냐하면 확률 계산을 진짜 못하기 때문이다….(그래서 확통과목도 망했고… 고등학교때도 힘들었다 ㅠㅠ)
그래도 이해는 좀 걸렸지만 N갯수도 적고 모든 경우를 그냥 다 구해버리면 되겠단 생각이 들어서 쉽다는 생각이 들었다.
하지만 이 문제는 풀이보다 가장 중요한 점이 있었다. 출력 조건을 잘 확인했어야했다…..!!
조건을 잘 확인하고 문제만 빠르게 이해한다면 어려운 문제는 아니였습니다.
소스코드는 다음과 같습니다.
Source Code:
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
int map[30][30];
bool visit[30][30] = {false,};
int N;
double Direction[4], Answer = 0;
int dx[4] = {0,0,1,-1}; // 동서남북
int dy[4] = {1,-1,0,0};
void solve(int x,int y, int cnt, double percentage) {
if (cnt == N) {
Answer += percentage;
return;
}
for (int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if (visit[nx][ny]) continue;
visit[nx][ny] = true;
solve(nx, ny, cnt + 1, percentage*Direction[i]);
visit[nx][ny] = false;
}
}
int main() {
cin >> N;
for (int i = 0; i < 4; i++) {
int d;
cin >> d;
Direction[i] = 0.01 * d;
}
visit[14][14] = true;
solve(14, 14, 0, 1.0);
cout.precision(10);
cout << fixed << Answer;
system("pause");
return 0;
}
궁금하신 점은 댓글 남겨 주세요!!
Summary
- 문제 이해력 높히기….
댓글남기기