Post

Programmers_게임 맵 최단거리

프로그래머스 -게임 맵 최단거리 문제 입니다.

1. 문제

https://programmers.co.kr/learn/courses/30/lessons/1844?language=cpp


2. 분류 및 난이도

Programmers 문제입니다.
찾아라 프로그래밍 마에스터 문제입니다. Level 2난이도의 문제입니다.


3. 생각한 것들(문제 접근 방법)

  • BFS나 DFS로 풀면 되는데, python으로는 해결이 안되어서.. 왜인지 모르게 그래서 c++로 풀었습니다.

4. 접근 방법을 적용한 코드

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
40
41
42
43
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;

int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};

int solution(vector<vector<int> > maps)
{
    int answer = 1234567;
    int row = maps.size();
    int col = maps[0].size();
    bool v[101][101] = {false,};
    
    queue<pair<pair<int,int>,int>> q;
    q.push(make_pair(make_pair(0,0),1));
    v[0][0] = true;
    while(!q.empty()){
        int x = q.front().first.first;
        int y = q.front().first.second;
        int count = q.front().second;
        if(x == row-1 && y ==col-1)
            answer = min(answer,count);
            
        q.pop();
        
        for(int k = 0 ; k <4;++k){
            int newX = x + dx[k];
            int newY = y + dy[k];
            if(0<=newX && newX <row && 0<=newY && newY<col && !v[newX][newY] && maps[newX][newY]==1){
                v[newX][newY] =true;
                q.push(make_pair(make_pair(newX,newY),count+1));
            }
        }
            
    }
    
    if(answer != 1234567)
        return answer;
    else
        return -1;
}

python(안되는 코드 로직은 같은데 why?..)

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
from collections import deque

dx = [0,1,0,-1];
dy = [1,0,-1,0];

def solution(maps):
    answer = 12345678
    q = deque()
    q.appendleft([0,0,1])
    
    row = len(maps)
    col = len(maps[0])
    v = [0] * 101
    for i in range(101):
        v[i] = [0]*101
    v[0][0]=1    
    while q:
        x,y,count = q.popleft()
        if x == row-1  and y == col-1 :
            answer = min(answer,count)
        for i in range (len(dx)):
            newX = x + dx[i]
            newY = y +dy[i]
            if 0<= newX and newX<row and 0<= newY and newY < col and v[newX][newY] != 1 and maps[newX][newY] == 1 :
                v[newX][newY] = 1
                count += 1
                q.append([newX,newY,count])
    
    if answer != 12345678 : 
        return answer
    else :
        return -1

5. 결과

python코드 왜 안되는 지 아시는 분?..

This post is licensed under CC BY 4.0 by the author.