티스토리 뷰
https://www.acmicpc.net/problem/1405
1405번: 미친 로봇
첫째 줄에 N, 동쪽으로 이동할 확률, 서쪽으로 이동할 확률, 남쪽으로 이동할 확률, 북쪽으로 이동할 확률이 주어진다. N은 14보다 작거나 같은 자연수이고, 모든 확률은 100보다 작거나 같은 자
www.acmicpc.net

문제 :
통제 할 수 없는 미친 로봇이 평면위에 있다. 그리고 이 로봇은 N번의 행동을 취할 것이다.
각 행동에서 로봇은 4개의 방향 중에 하나를 임의로 선택한다. 그리고 그 방향으로 한 칸 이동한다.
로봇이 같은 곳을 한 번보다 많이 이동하지 않을 때, 로봇의 이동 경로가 단순하다고 한다. (로봇이 시작하는 위치가 처음 방문한 곳이다.) 로봇의 이동 경로가 단순할 확률을 구하는 프로그램을 작성하시오. 예를 들어, EENE와 ENW는 단순하지만, ENWS와 WWWWSNE는 단순하지 않다. (E는 동, W는 서, N은 북, S는 남)
유형 : 백트랙킹 + 확률론
접근
- 이동 횟수를 기준으로 재귀 탈출문을 구성하는 간단한 백트랙킹 유형의 문제이다.
- 정해진 방향에 따라 해당 좌표를 방문한 적 있는가를 판단하면 된다.
- 최대 이동은 14회이다. 한 방향으로만 14회 이동한다 가정했을 때 배열의 크기를 (31,31)로 잡고 (15,15) 부터 탐색하면 별도의 좌표계를 벗어나는 것에 대한 처리를 하지 않아도 된다.
- 문제는 확률론이다.
- 한번의 n개의 이동 (북 -> 남 -> 동) 의 경우 북의 확률 * 남의 확률 * 동의 확률로 계산한다. (확률의 곱)
- m개의 n개 이동의 확률 -> n개이동 확률의 합 (확률의 합)
전체 코드
import java.util.*;
import java.io.*;
public class Main {
static int n = 0;
static double[] per;
static int[] dx = {0,0,0,1,-1};
static int[] dy = {0,1,-1,0,0};
static boolean[][] v= new boolean[32][32];
static double result = 0.0;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
per = new double[5];
for(int i=1;i<=4;i++){
per[i] = Double.parseDouble(st.nextToken()) / 100.0;
}
v[15][15] = true;
travel(0,15,15,1.0);
System.out.printf("%.9f",result);
br.close();
}
static void travel(int count,int x,int y,double cur){
if(count == n){
result += cur;
return;
}
for(int i=1;i<=4;i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(!v[nx][ny]){
v[nx][ny] = true;
travel(count+1,nx,ny,cur*per[i]);
v[nx][ny] = false;
}
}
}
}'알고리즘 > 백준' 카테고리의 다른 글
| 백준 1719 (택배) - java (0) | 2023.09.26 |
|---|---|
| 백준 5430 (AC) - java (0) | 2023.09.26 |
| 백준 2887 (행성 터널) - java (0) | 2023.09.21 |
| 백준 17822 (배열 돌리기) - java (0) | 2023.09.18 |
| 백준 2151 (거울 설치) - java (0) | 2023.09.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준 #12014 #주식 #자바 #java
- 백준
- 백준 #치즈 #2638
- 백준 #다리 만들기 #2146
- 백준 #4963 #섬의 개수
- 올해보다
- 백준 #17940 #주식 #자바 #java
- 백준 #2636 #치즈
- 자바 #JAVA
- 백준 #15686 #치킨 배달
- 백준 #1759 #암호 만들기
- 백준 #인구 이동 #16234
- 백준 #13549 #숨바꼭질3
- 17394
- 백준 #
- 백준 #16973 #직사각형 탈출
- 백준 #5721 #사탕 줍기 대회 #java #자바
- 백준 #25603 #짱해커 이동식 #java #자바
- 자바
- 백준 #1325 #효율적인 해킹
- 백준 #1987 #알파벳 #자바 #java
- 백준 #3980 #선발 명단
- 백준 #18405 #경쟁적 전염
- 백준 #2580 #스도쿠
- 행복합시다.
- 백준 #14863 #서울에서 경산까지 #java #자바
- Java
- 백준 #1584 #게임 #java #자바
- 17218
- 백준 #28140 #빨강~ 빨강~ 파랑! 파랑! 달콤한 솜사탕! #java #자바
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
글 보관함