문제: https://school.programmers.co.kr/learn/courses/30/lessons/172928
1. 코드
class Solution {
public int[] solution(String[] park, String[] routes) {
int[][] move = {
{-1, 0},
{1, 0},
{0, -1},
{0, 1}
};
int[] position = new int[2];
for(int i = 0; i < park.length; i++) {
if(park[i].contains("S")) {
position[0] = i;
position[1] = park[i].indexOf("S");
break;
}
}
for(String r : routes) {
int direction = 0;
switch(r.charAt(0)){
case 'N' -> direction = 0;
case 'S' -> direction = 1;
case 'W' -> direction = 2;
case 'E' -> direction = 3;
}
int repeat = Integer.parseInt(r.substring(2));
int[] temp = position.clone();
for(int i = 0; i < repeat; i++) {
temp[0] += move[direction][0];
temp[1] += move[direction][1];
if(temp[0] < 0 || temp[1] < 0 || temp[0] >= park.length || temp[1] >= park[0].length() || park[temp[0]].charAt(temp[1]) == 'X') {
temp = position.clone();
break;
}
}
position = temp.clone();
}
return position;
}
}
2. 설명
int[][] move = {
{-1, 0},
{1, 0},
{0, -1},
{0, 1}
};
1 행부터 N, S, W, E 방향의 움직임입니다.
int[] position = new int[2];
for(int i = 0; i < park.length; i++) {
if(park[i].contains("S")) {
position[0] = i;
position[1] = park[i].indexOf("S");
break;
}
}
현재 위치를 반복문을 통해서 파악합니다.
for(String r : routes) {
int direction = 0;
switch(r.charAt(0)){
case 'N' -> direction = 0;
case 'S' -> direction = 1;
case 'W' -> direction = 2;
case 'E' -> direction = 3;
}
방향에 맞춰서 move 인덱스 값을 저장합니다.
int repeat = Integer.parseInt(r.substring(2));
int[] temp = position.clone();
for(int i = 0; i < repeat; i++) {
temp[0] += move[direction][0];
temp[1] += move[direction][1];
if(temp[0] < 0 || temp[1] < 0 || temp[0] >= park.length || temp[1] >= park[0].length() || park[temp[0]].charAt(temp[1]) == 'X') {
temp = position.clone();
break;
}
}
position = temp.clone();
}
repeat에 반복 횟수에 대한 정보를 저장하고 temp에 position 값을 복사합니다. 반복문을 통해서 움직이고자 하는 위치에 방해물이 없는지 위치가 없는지 확인합니다. 만약 해당된다면 temp에 position 값을 복사한 뒤 반복문을 탈출함으로써 이동하지 않음으로 처리합니다.
만약 문제가 없다면 이동된 상태를 저장하기 위해 temp의 값을 postion에 저장합니다.
3. 정리
- 배열에서의 상하좌우의 움직임을 구현한다면 쉽게 해결 가능하다.
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/challenges
'컴퓨터 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 42885번: 구명보트 [Java] (0) | 2023.08.21 |
---|---|
프로그래머스 - 92334번: 신고 결과 받기 [Java] (0) | 2023.08.20 |
프로그래머스 - 178871번: 달리기 경주 [Java] (0) | 2023.08.18 |
프로그래머스 - 150370번: 개인정보 수집 유효 기간 [Java] (0) | 2023.08.17 |
프로그래머스 - 161990번: 바탕화면 정리 [Java] (0) | 2023.08.16 |