[Java] 공원 산책 - Lv1 프로그래머스코딩테스트/프로그래머스2023. 3. 24. 12:19
Table of Contents
728x90
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/172928
풀이
어떻게하면 코드를 줄일 수 있을까 생각하다가 결국 원점으로 돌아와버렸다
방위 선택이나 이동시키는 과정에서 단축시키는 재귀함수를 생각해보았는데 결국 빙빙돌아서 해결이 되지 않았다
다시 원초적으로 돌아와서 쭉 나열해서 풀어서 성공했다.
class Solution {
public int[] solution(String[] park, String[] routes) {
int startX = 0;
int startY = 0;
int xLength = park[0].length();
int yLength = park.length;
char[][] parking = new char[park.length][park[0].length()];
for(int i=0; i<park.length; i++) {
for(int j=0; j<park[i].length(); j++) {
parking[i][j] = park[i].charAt(j);
if(park[i].charAt(j) == 'S') {
startX = j;
startY = i;
}
}
}
String[] where = new String[routes.length];
int[] length = new int[routes.length];
for(int i=0; i<routes.length; i++) {
where[i] = routes[i].split(" ")[0];
length[i] = Integer.parseInt(routes[i].split(" ")[1]);
}
char now = 0;
int nowX = startX;
int nowY = startY;
for(int i=0; i<routes.length; i++) {
for(int j=1; j<=length[i]; j++) {
switch(where[i]) {
case "E":
if(startX+length[i] >= xLength) break;
now = parking[startY][startX + j];
nowX = startX+j;
break;
case "W":
if(startX-length[i] < 0) break;
now = parking[startY][startX - j];
nowX = startX-j;
break;
case "S":
if(startY+length[i] >= yLength) break;
now = parking[startY+j][startX];
nowY = startY+j;
break;
case "N":
if(startY-length[i] < 0) break;
now = parking[startY-j][startX];
nowY = startY-j;
break;
}
if(now == 'X' || now == 0) {
nowX = startX;
nowY = startY;
break;
}
}
if(now != 'X' && now != 0) {
startX = nowX;
startY = nowY;
}
}
return new int[]{startY, startX};
}
}
코드를 간결화 하는 습관을 기르고 싶은데 머리속에 있는걸 코드로 작성하는 능력이 많이 부족하다 ㅠㅠ
728x90
300x250
@mag1c :: 꾸준히 재밌게
2023.04 ~ 백엔드 개발자의 기록
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!