Lewis's Tech Keep
[프로그래머스] 보행자 천국 - 실패 본문
- bfs로 풀려고 시도했으나
- m이 500 으로 크므로 bfs는 최악의 경우에 시간초과가 난다.
- 실패 -> dp로 시도해야 함
더보기
import java.util.*;
class Point {
int x;
int y;
String dir;
public Point(int x, int y, String dir) {
this.x = x;
this.y = y;
this.dir = dir;
}
public String getDir() {
return dir;
}
public boolean canMove(int x, int y, int m, int n) {
return x >=0 && y >= 0 && x < m && y < n;
}
public boolean isGoal(int m, int n) {
return x == m-1 && y == n-1;
}
}
class Solution {
int MOD = 20170805;
public int solution(int m, int n, int[][] cityMap) {
int answer = 0;
Queue<Point> q = new LinkedList<Point>();
q.add(new Point(0, 0, "start"));
while(!q.isEmpty()) {
Point cp = q.poll();
int cx = cp.x;
int cy = cp.y;
String dir = cp.dir;
if(cp.isGoal(m,n)) {
answer++;
}
if(cp.canMove(cx, cy, m, n)) {
int cVal = cityMap[cx][cy];
if(cVal == 0) {
Point dp = new Point(cx+1, cy, "d");
q.add(dp);
Point rp = new Point(cx, cy+1, "r");
q.add(rp);
} else if (cVal == 2) {
if(dir.equals("d")) {
Point dp = new Point(cx+1, cy, "d");
q.add(dp);
} else if (dir.equals("r")) {
Point rp = new Point(cx, cy+1, "r");
q.add(rp);
}
} else {
// 1일때는 넘어감
}
}
}
return answer % MOD;
}
}
'Java > 알고리즘' 카테고리의 다른 글
[프로그래머스] 가장 먼 노드 (0) | 2021.05.01 |
---|---|
[프로그래머스] 보행자 천국 (0) | 2021.05.01 |
[프로그래머스] 자물쇠와 열쇠 (0) | 2021.04.16 |
[프로그래머스] 브라이언의 고민 (0) | 2021.04.15 |
[프로그래머스] 풍선 터트리기 (0) | 2021.04.15 |
Comments