반응형
온라인 문제풀이 사이트 Programmers의 문제 '보행자 천국' 문제.
https://programmers.co.kr/learn/courses/30/lessons/1832?language=java
문제는 간단하게 다음과 같다.
1. m X n 배열이 주어진다.
2. 0은 차량 통행 가능, 1은 차량 통행 불가, 2는 좌회전과 우회전 금지(진입한 방향 기준 직진만 가능)
3. (0, 0) 부터 (m, n)까지 갈 수 있는 경로의 수를 출력한다.
풀이 과정
m과 n의 최댓값이 500이므로, 완전탐색으로 충분히 풀 수 있는 문제이다.
result 배열을 만들어 오른쪽과 아래쪽 방향으로 수를 채워 나갈 것이다.
현재 index가 최상단과 가장 좌측일 경우, 진입한 경로가 하나이기 때문에 1로 채운다.
주어진 배열에 따라 아래 그림과 같이 각 index 값을 조정한다
이제 나머지 index를 아래와 같이 채운다
실행 결과 두 개의 테스트 케이스가 맞은 것을 확인 할 수 있었는데,
실제로 채점을 해 보니 채점은 하나의 테스트 케이스이며 실패가 떴다.
아래는 코드 전문
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
29
30
31
32
33
34
35
36
37
38
39
|
class Solution{
static int MOD = 20170805;
public static int solution(int m, int n, int[][] cityMap) {
int answer = 0;
int [][] resultArr = new int[m][n];
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++){
resultArr[i][j] = 1;
}
}
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
switch(cityMap[i][j]) {
case 0 :
if(i > 0 && j > 0) resultArr[i][j] = (resultArr[i-1][j] % MOD + resultArr[i][j-1] % MOD) % MOD;
else resultArr[i][j] = 1;
break;
case 1 :
resultArr[i][j] = 0;
break;
case 2 :
if(i > 0 && j > 0) resultArr[i][j] = (resultArr[i-1][j] % MOD + resultArr[i][j-1] % MOD) % MOD;
if(resultArr[i][j] > 0) resultArr[i][j] -= 1;
break;
}
}
}
answer = resultArr[m-1][n-1] % MOD;
return answer;
}
}
|
해설을 참고하니 로직 상으로 틀린 것 같지는 않은데,
어디서 잘못됐는지 확인 중이다.
현재 생각으로는 아마도 값의 범위에서 오류가 나는 듯 하다.
반응형
'개발 정보 > Algorithm' 카테고리의 다른 글
[프로그래머스] 쿠키 구입 (0) | 2019.03.29 |
---|---|
[프로그래머스] 추석트래픽 (1) | 2019.03.09 |
[프로그래머스] 스킬트리 (0) | 2019.03.06 |
[알고리즘 Tip] 행렬의 곱셈 (0) | 2018.05.18 |
BFS, DFS (0) | 2018.03.30 |