- 난이도: Lv1
프로그래머스 링크: https://school.programmers.co.kr/learn/courses/30/lessons/172928
풀이 링크(GitHub): hayannn/CodingTest_Java/프로그래머스/1/172928. 공원 산책
풀이 시간 : 29분
import java.util.*;
class Solution {
public int[] solution(String[] park, String[] routes) {
//getAnswer 적용해야 할 듯..?
int[] answer = {};
Map<Character, int[]> coord = new HashMap<>();
coord.put('N', new int[]{-1, 0});
coord.put('S', new int[]{1, 0});
coord.put('W', new int[]{0, -1});
coord.put('E', new int[]{0, 1});
for(String route : routes){
char direction = route.charAt(0);
int count = route.charAt(2) - '0';
int[] directionXY = coord.get(direction);
//위치
int dx = directionXY[0];
int dy = directionXY[1];
//현재 위치
int cx = answer[0];
int cy = answer[1];
boolean visited = true;
for(int i=0; i<count; i++){
cx += dx;
cy += dy;
//공원 경계 벗어나거나, 장애물 X에 닿으면 종료
if(cx < 0 || cy < 0 || cx >park.length-1 || cy >park[0].length()-1){
visited = false;
break;
}
if( park[cx].charAt(cy) == 'X'){
visited = true;
break;
}
if(visited){
answer[0] = cx;
answer[1] = cy;
}
}
}
return answer;
}
//별도 메서드 : 시작 위치를 찾는 메서드 구현(answer 배열에 넣을 것)
public int[] getAnswer(String[] park){
for(int i=0; i<park.length; i++){
for(int j=0; j<park[0].length(); j++){
char current = park[i].charAt(j);
if('S' == current){
return new int[]{i, j};
}
}
}
return new int[]{0,0};
}
}
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
//before
int[] answer = {};
//after
int[] answer = getAnswer(park);
//before
//공원 경계 벗어나거나, 장애물 X에 닿으면 종료
if(cx < 0 || cy < 0 || cx >park.length-1 || cy >park[0].length()-1){
visited = false;
break;
}
if( park[cx].charAt(cy) == 'X'){
visited = true;
break;
}
if(visited){
answer[0] = cx;
answer[1] = cy;
}
//after
for(String route : routes){
char direction = route.charAt(0);
int count = route.charAt(2) - '0';
int[] directionXY = coord.get(direction);
//위치
int dx = directionXY[0];
int dy = directionXY[1];
//현재 위치
int cx = answer[0];
int cy = answer[1];
boolean visited = true;
for(int i=0; i<count; i++){
cx += dx;
cy += dy;
//공원 경계 벗어나거나, 장애물 X에 닿으면 종료
if(cx < 0 || cy < 0 || cx >park.length-1 || cy >park[0].length()-1){
visited = false;
break;
}
if( park[cx].charAt(cy) == 'X'){
visited = false;
break;
}
}
if(visited){
answer[0] = cx;
answer[1] = cy;
}
}
return answer;
풀이 시간 : 47분(첫 풀이 시간 포함)
import java.util.*;
class Solution {
public int[] solution(String[] park, String[] routes) {
//getAnswer 적용해야 할 듯..?
//int[] answer = {};
int[] answer = getAnswer(park);
Map<Character, int[]> coord = new HashMap<>();
coord.put('N', new int[]{-1, 0});
coord.put('S', new int[]{1, 0});
coord.put('W', new int[]{0, -1});
coord.put('E', new int[]{0, 1});
for(String route : routes){
char direction = route.charAt(0);
int count = route.charAt(2) - '0';
int[] directionXY = coord.get(direction);
//위치
int dx = directionXY[0];
int dy = directionXY[1];
//현재 위치
int cx = answer[0];
int cy = answer[1];
boolean visited = true;
for(int i=0; i<count; i++){
cx += dx;
cy += dy;
//공원 경계 벗어나거나, 장애물 X에 닿으면 종료
if(cx < 0 || cy < 0 || cx >park.length-1 || cy >park[0].length()-1){
visited = false;
break;
}
if( park[cx].charAt(cy) == 'X'){
visited = false;
break;
}
}
if(visited){
answer[0] = cx;
answer[1] = cy;
}
}
return answer;
}
//별도 메서드 : 시작 위치를 찾는 메서드 구현(answer 배열에 넣을 것)
public int[] getAnswer(String[] park){
for(int i=0; i<park.length; i++){
for(int j=0; j<park[0].length(); j++){
char current = park[i].charAt(j);
if('S' == current){
return new int[]{i, j};
}
}
}
return new int[]{0,0};
}
}