[백준] 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

  • 문제 이해력 높히기….

댓글남기기