본문 바로가기
알고리즘/c++ 프로그래머스

[프로그래머스 공원 산책] c++ (풀이,코드)

by 말린밴댕이_공부 2023. 6. 19.
반응형

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/172928

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

 

풀이 및 코드

 

문제가 요구를 하는 방식에 대해서는 간단합니다.

 

결국 간단한 string으로 들어온 벡터의 문자열을 처리하는 것에 대해서 처리를 진행해줍니다.

 

1.맵의 y크기,x크기와 더불어 시작 좌표를 구하였습니다.

2.움직일 수 있다면 움직이고 움직일 수 없다면 이동을 하지 않는 방식을 진행하였습니다.

    조건 1) 움직이려 할때 맵의 범위를 벗어나는지 체크

    조건 2) 맵의 범위를 벗어나지 않는다면 'X'가 있는지에 대한 체크

 

 

물론 움직이는 방향 E,W,S,N에 대해서 따로 MAP으로 설정을 하거나 함수를 설정하면 편할테지만 조금은 귀찮은 관계로..

푼 관계가 없지않아 있습니다.

 

레벨 1에서 너무 많은 피로도를 쏟고 싶지는 않고 효율적인 측면에서도 뒤쳐지지 않는다고 판단하여 따로 함수를 쪼개지는 않았습니다.

 

/*
공원 산책 -> 지나다니는 길 o 장애물 x
"방향 거리" , "방향 거리" -> 이런식

결국 명령을 했을때 갈 수 있는지에 대한 체크를 하면 된다.
못가면 패스 갈 수 있다면 통과
*/

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

using namespace std;

int boundaryCheck(vector<string>park,int direction, int move); //park, 방향, 이동횟수

vector<int> solution(vector<string> park, vector<string> routes) {
    vector<int> answer;
   
    int y =0, x= 0; //시작 좌표설정
    int mapY = park.size(); //맵 y크기
    int mapX = park[0].size(); //맵 x크기
   
    for(int i  = 0; i < mapY;i++){
        for(int j = 0; j < mapX;j++){
            if(park[i][j] == 'S'){
                y=i;
                x=j;
            }
        }
    }
   
    for(int i = 0; i < routes.size();i++){
        int step = (routes[i][2] - '0'); // step의 크기
        int cantMove = 0; // 움직이지 못하면 1 가능 -> 0
        if(routes[i][0] == 'E'){
            if(x + step < mapX){
                for(int j = x;j <= x + step;j++){
                    if(park[y][j]=='X')
                        cantMove = 1;
                }
                if(cantMove == 0)
                    x += step;
            }
        }else if (routes[i][0] == 'W'){
            if(0 <=x - step){
                for(int j = x;j >= x - step;j--){
                    if(park[y][j]=='X')
                        cantMove = 1;
                }
                if(cantMove == 0)
                    x -= step;
            }
        }else if (routes[i][0] == 'S'){
            if(y + step < mapY){
                for(int j = y;j <= y + step;j++){
                    if(park[j][x]=='X')
                        cantMove = 1;
                }
                if(cantMove == 0)
                    y += step;
            }
           
        }else if (routes[i][0] == 'N'){
            if(0 <= y - step){
                for(int j = y;y-step <= j;j--){
                    if(park[j][x]=='X')
                        cantMove = 1;
                }
                if(cantMove == 0)
                    y -= step;
            }
        }
    }
   
    answer.push_back(y);
    answer.push_back(x);
    return answer;
}


반응형

댓글