[프로그래머스]방문길이 문제

GomHyeok·2022년 4월 1일
0

📒활용개념

좌표 문제에서 활용할 수 있는 여러가지 Tip을 활요해야 쉽게 갈 수 있는 문제

📌문제설명

게임 캐릭터를 움직일 때 게임 캐릭터가 처음 걸어본 길의 길이를 구하여라

  • 캐릭터를 움직이는 4가지 명령어
    - U: 위쪽으로 한 칸 가기
    - D: 아래쪽으로 한 칸 가기
    - R: 오른쪽으로 한 칸 가기
    - L: 왼쪽으로 한 칸 가기
    캐릭터의 시작 위치는 (0,0)이고 이동 한번의 이동거리는 1이다.

📌구현

#include <string>
#include <vector>
#include <iostream>

using namespace std;



int solution(string dirs) {
    int answer = 0;
    //이동 여부를 체크하는 map, [출발 X][출발 Y][도착 X][도착 Y]
    int board[11][11][11][11];
    //캐릭터의 시작 위치 설정
    int curx=5;
    int cury=5;
    
    //이동 for문
    for(int i=0; i<dirs.size(); i++){
        char dir=dirs[i];
        //위로 이동
        if(dir=='U'&& cury+1<11){
        //처음 이동하는 경우
            if(board[curx][cury][curx][cury+1]!=1){
            //이동 여부 표시
                board[curx][cury][curx][cury+1]=1;
                board[curx][cury+1][curx][cury]=1;
                answer++;
            }
            //Y좌표 이동
            cury++;
        }
		//아래로 이동
        else if(dir=='D'&& cury-1>=0){
            if(board[curx][cury][curx][cury-1]!=1){
                board[curx][cury][curx][cury-1]=1;
                board[curx][cury-1][curx][cury]=1;
                answer++;
            }
            cury--;
        }
        //좌로 이동
        else if(dir=='L'&& curx-1>=0){
            if(board[curx][cury][curx-1][cury]!=1){
                board[curx][cury][curx-1][cury]=1;
                board[curx-1][cury][curx][cury]=1;
                answer++;
            }
            curx--;
        }
        //우로 이동
        else if(dir=='R'&& curx+1<11){
            if(board[curx][cury][curx+1][cury]!=1){
                board[curx][cury][curx+1][cury]=1;
                board[curx+1][cury][curx][cury]=1;
                answer++;
            }
            curx++;
        }
        
    }
    
    return answer;
}

📌주의점

  • 4차원 배열을 사용하면 출발지점과 도착지점의 x,y좌표를 이용해 경로를 표시할 수 있다.
  • 출발점이 0,0이라면 Map의 경계를 고려할 때 음수까지 고려해야햠으로 출발점의 위치를 문제에 따라 적적하게 바꿔준다.

위의 주의점을 모르고 그냥 문제를 푼다면 Hardcording을 하기 쉬운 문제다. 나도 처음에는 Hardcording을 해서 런타임 에러가 나와 다시 풀었던 문제다. 다른 좌표 문제를 풀 때도 위의 주의점을 활용하여 푼다면 더 쉽게 풀 수 있을 것이다.

profile
github : https://github.com/GomHyeok/

0개의 댓글

관련 채용 정보