[Programmers]_C++_Algorithm_공원산책

신치우·2025년 2월 28일

C++_algorithm

목록 보기
12/17

switch문을 이렇게 지저분하게 하지 않고
함수를 하나 만들어서 처리하는게 더 깔끔하게 해결할 수 있을거 같다
그리고 map을 돌아다니는 것이기 때문에 index가 벗어나지 않게 꼭 신경쓰자

추가 테스트 케이스

  1. ["OXO", "XSX", "OXO"]["S 1", "E 1", "W 1", "N 1"] [1, 1]
  2. ["XXS", "OOO", "OOO"]["W 1"] [0, 2]
  3. ["SOOXO", "OOOXO", "OXOOO", "XOOOO"]["E 2", "S 2", "W 2", "S 1", "W 1"] [3, 1]
  4. ["OOOOO", "OOOOO", "OOSOO", "OOOOO", "OOOOO"]["E 3", "W 3", "S 3", "N 3", "E 2", "E 1", "W 4", "W 1", "S 2", "S 1", "N 4", "N 1"] [0, 0]
#include <iostream>
#include <string>
#include <vector>
#include <sstream>

using namespace std;

vector<int> solution(vector<string> park, vector<string> routes) {
    vector<int> answer;
    int S_point[2] = {-1, -1};
    int row_x = park.size();
    int col_x = park[0].size();
    
    for(int i =0; i<park.size(); i++){
        for(int j=0; j<park[i].size(); j++){
            if (park[i][j] == 'S'){
                S_point[0] = i; // row
                S_point[1] = j; // col
                break;
            }
        }
        if(S_point[0] != -1 && S_point[1] != -1)
            break;
    }
    
    for (int i=0; i<routes.size(); i++){
        stringstream route;
        char sub1;
        int sub2;
        route.str(routes[i]);
        route >> sub1 >> sub2;
        
        // cout << sub1 << " " << sub2 << endl;
        switch (sub1){
            case 'E':
                if (col_x > S_point[1]+sub2){
                    int flag = 0;
                    for(int j=S_point[1]+1; j<S_point[1]+sub2+1; j++){
                        if(park[S_point[0]][j] == 'X'){
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0)
                        S_point[1] = S_point[1]+sub2;
                }
                break;
            case 'W':
                if (0 <= S_point[1]-sub2){
                    int flag = 0;
                    for(int j=S_point[1]-1; j>S_point[1]-sub2-1; j--){
                        if(park[S_point[0]][j] == 'X'){
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0)
                        S_point[1] = S_point[1]-sub2;
                }
                break;
            case 'S':
                if (row_x > S_point[0]+sub2){
                    int flag = 0;
                    for(int j=S_point[0]+1; j<S_point[0]+sub2+1; j++){
                        if(park[j][S_point[1]] == 'X'){
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0)
                        S_point[0] = S_point[0]+sub2;
                }
                break;
            case 'N':
                if (0 <= S_point[0]-sub2){
                    int flag = 0;
                    for(int j=S_point[0]-1; j>S_point[0]-sub2-1; j--){
                        if(park[j][S_point[1]] == 'X'){
                            flag = 1;
                            break;
                        }
                    }
                    if (flag == 0)
                        S_point[0] = S_point[0]-sub2;
                }
                break;
        }
    }
    answer.push_back(S_point[0]);
    answer.push_back(S_point[1]);
    
    return answer;
}
profile
https://shin8037.tistory.com/

0개의 댓글