public int[] Solution(String[] park, String[] routes) {
int[] answer = new int[] {};
int[] start = {};
for(int i = 0 ; i < park.Length; ++i){ //시작점 찾기
bool find = false;
for(int j = 0 ; j < park[i].Length; ++j){
if(park[i][j] == 'S'){ //S와 동일한 문자를 찾는다면
start = new int[]{i , j}; //지점을 저장
find = true; //전체 반복문 종료 플래그
break; //현재 반복문 종료
}
}
if(find){
break;
}
}
for(int i = 0; i < routes.Length ; ++i){ //루트를 탐색
String[] r = routes[i].Split(" "); //루트를 방향과 이동거리를 나누기 위해 띄어쓰기를 기준으로 Split()
String comp = r[0]; //0번 배열은 방향
int move = int.Parse(r[1]); //1번 배열은 이동거리
if(comp == "N"){ //방향의 조건
if(start[0] - move >= 0){ //최종이동거리가 park배열을 벗어나지 않도록
int count = 0; //유효 이동거리(장애물을 제외)
for(int j = 1 ; j <= move ; ++j){ //이동거리만큼 반복
if(park[start[0]-j][start[1]] != 'X'){ //탐색중 장애물을 만나지 않는다면
count++;
}
}
if(count == move){ //유효이동거리가 목표이동거리와 동일하면
start[0] -= move; //각 상황에 맞는 방향으로 이동
}
}
}
else if(comp == "S"){
if(start[0] + move < park.Length){
int count = 0;
for(int j = 1 ; j <= move ; ++j){
if(!park[start[0]+j][start[1]].Equals('X')){
count = j;
}else{
count = 0;
break;
}
}
start[0] += count;
}
}
else if(comp == "W"){
if(start[1] - move >= 0){
int count = 0;
for(int j = 1 ; j <= move ; ++j){
if(park[start[0]][start[1]-j] != 'X'){
count++;
}
}
if(count == move){
start[1] -= move;
}
}
}
else if(comp == "E"){
if(start[1] + move < park[0].Length){
int count = 0;
for(int j = 1 ; j <= move ; ++j){
if(park[start[0]][start[1]+j] != 'X'){
count++;
}
}
if(count == move){
start[1] += move;
}
}
}
Console.WriteLine("현재 위치 : " + start[0] + " , " + start[1]);
}
answer = start;
return answer;
}
단순히 배열과 반복문으로 완성했지만 더 나은 코드가 반드시 있을것으로 예상됨...