3. S를 1씩(이게 중요하다.) 움직여서 요구사항 마지막까지 따를 수 있다면 모두 따르자.
나는 E, S, N, W 4가지의 경우에 맞춰서 구현을 하였다.
* 만일 방향 요구가 E라면
if(route.first == '방향'){
if(현재 좌표.가로 or 세로 + 가야 하는 숫자 < 가로 길이 or 세로 길이){
//도중에 'X'가 있는지 파악할 bool 변수
bool flag = true;
//for을 이용해서 가야하는 숫자 만큼 진행
for(int j = 1;j<=가야 하는 숫자;j++){
//만일 X가 있다면 변수를 fasle로 변경
//여기선 E라서 x좌표가 움직인다고 가정 W이면 j를 빼주자.
//만일 N이나 S라면 y좌표를 움직이자.
if(arr[y좌표][x좌표 + j] == 1){
flag = false;
}
}
//만일 한번도 X가 없었다면
if(flag){
현재좌표.x좌표 += 가야하는 숫자;
}
}
}
세부적인 부분을 제외하고는 해당 코드를 W, S, N의 경우에도 맞춰서 변경해서 넣어주면 코드 구현이 이루어진다.
[코드]
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int arr[51][51];
//해당 함수를 통해서 string 안에 들어있는 내용을 pair 안에 first는 방향, second는 숫자로 입력시킨다.
pair<char,int> splited(string str){
pair<char,int> answer;
answer.first = str[0];
answer.second = str[2] - '0';
return answer;
}
vector<int> solution(vector<string> park, vector<string> routes) {
vector<int> answer;
//1. S위치 찾기.
//2. X 위치 찾기.
//3. S를 routes의 지시대로 X까지 옮기기
//S의 location을 저장할 pair 변수.
pair<int, int> locs;
//공원의 가로폭과 세로폭의 한계 파악.
int east = park[0].size();
int south = park.size();
//S의 위치를 locs에 저장, X의 위치를 arr 배열안에 1로 저장하자.
for(int i = 0;i<park.size();i++){
for(int j = 0;j<park[i].size();j++){
if(park[i][j] == 'S'){
locs.first = i;
locs.second = j;
}
if(park[i][j] == 'X'){
arr[i][j] = 1;
}
}
}
for(int i = 0;i<routes.size();i++){
//routes[i]의 좌표와 숫자를 저장할 변수
pair<char, int> route;
route = splited(routes[i]);
//만일 동쪽이면
if(route.first == 'E'){
if(locs.second + route.second < east){
bool flag = true;
for(int j = 1;j<=route.second;j++){
if(arr[locs.first][locs.second + j] == 1){
flag = false;
}
}
if(flag){
locs.second += route.second;
}
}
}
//북쪽이면
else if(route.first == 'N'){
if(locs.first - route.second >= 0){
bool flag = true;
for(int j = 1;j<=route.second;j++){
if(arr[locs.first - j][locs.second] == 1){
flag = false;
}
}
if(flag){
locs.first -= route.second;
}
}
}
//남쪽이면
else if(route.first == 'S'){
if(locs.first + route.second < south){
bool flag = true;
for(int j = 1;j<=route.second;j++){
if(arr[locs.first + j][locs.second] == 1){
flag = false;
}
}
if(flag){
locs.first += route.second;
}
}
}
//서쪽이면
else if(route.first == 'W'){
if(locs.second - route.second >= 0){
bool flag = true;
for(int j = 1;j<=route.second;j++){
if(arr[locs.first][locs.second - j] == 1){
flag = false;
}
}
if(flag){
locs.second -= route.second;
}
}
}
}
//마지막 위치를 answer에 넣어주자.
answer.push_back(locs.first);
answer.push_back(locs.second);
return answer;
}