728x90
코드 힌트
- 현재 위치 찾기:
- 공원 배열에서 'S'로 표시된 시작 위치를 찾습니다.
- 이 위치가 로봇 강아지의 초기 위치가 됩니다.
- 이 위치를 2차원 배열의 인덱스로 변환하여 저장합니다.
- 방향 및 거리 처리:
- 각 경로(route)는 방향과 이동 거리를 포함합니다.
- 방향은 "N" (북쪽), "S" (남쪽), "E" (동쪽), "W" (서쪽)으로 주어지며, 이를 기준으로 로봇 강아지를 이동시킵니다.
- 이동 거리는 해당 방향으로 몇 칸 이동해야 하는지를 나타내며, 이동 도중 장애물이 있으면 이동을 중단하고 다음 명령을 처리합니다.
- 방향별 이동 처리:
- "N" (북쪽): 위쪽으로 이동하며, y 좌표를 감소시킵니다. 이동 도중 인덱스가 0보다 작아지거나, 장애물('X')을 만나면 이동을 중단합니다.
- "S" (남쪽): 아래쪽으로 이동하며, y 좌표를 증가시킵니다. y 좌표가 공원의 높이(h)를 넘거나 장애물('X')을 만나면 이동을 중단합니다.
- "E" (동쪽): 오른쪽으로 이동하며, x 좌표를 증가시킵니다. x 좌표가 공원의 폭(w)을 넘거나 장애물('X')을 만나면 이동을 중단합니다.
- "W" (서쪽): 왼쪽으로 이동하며, x 좌표를 감소시킵니다. x 좌표가 0보다 작아지거나 장애물('X')을 만나면 이동을 중단합니다.
정답은 더보기 클릭
더보기
import java.util.*;
class Solution {
int h; // 공원의 높이
int w; // 공원의 너비
public int[] solution(String[] park, String[] routes) {
// 로봇 강아지의 초기 위치 설정
int[] point = init(park);
// 공원의 크기 저장
h = park.length;
w = park[0].length();
// 각 경로에 따라 로봇 강아지를 이동
for (String route : routes) {
String[] routeArr = route.split(" ");
String direction = routeArr[0]; // 방향
int distance = Integer.parseInt(routeArr[1]); // 이동 거리
// 주어진 방향과 거리만큼 로봇 강아지를 이동
move(park, point, direction, distance);
}
// 최종 로봇 강아지의 위치 반환
return point;
}
// 공원에서 로봇 강아지의 초기 위치 찾기 ('S' 위치)
public int[] init(String[] park) {
int[] result = new int[2];
for (int i = 0; i < park.length; i++) {
for (int j = 0; j < park[i].length(); j++) {
if (park[i].charAt(j) == 'S') {
result[0] = i; // y 좌표 (행)
result[1] = j; // x 좌표 (열)
break;
}
}
}
return result;
}
// 주어진 방향과 거리만큼 로봇 강아지를 이동
public void move(String[] park, int[] point, String direction, int distance) {
int x = point[1]; // 현재 x 좌표
int y = point[0]; // 현재 y 좌표
// 방향에 따른 이동 처리
switch (direction) {
case "E": // 동쪽으로 이동
for (int i = 1; i <= distance; i++) {
if (x + i >= w || park[y].charAt(x + i) == 'X') {
return; // 이동 중 장애물을 만나면 이동 중단
}
}
point[1] += distance; // x 좌표를 증가시켜 이동
break;
case "W": // 서쪽으로 이동
for (int i = 1; i <= distance; i++) {
if (x - i < 0 || park[y].charAt(x - i) == 'X') {
return; // 이동 중 장애물을 만나면 이동 중단
}
}
point[1] -= distance; // x 좌표를 감소시켜 이동
break;
case "S": // 남쪽으로 이동
for (int i = 1; i <= distance; i++) {
if (y + i >= h || park[y + i].charAt(x) == 'X') {
return; // 이동 중 장애물을 만나면 이동 중단
}
}
point[0] += distance; // y 좌표를 증가시켜 이동
break;
case "N": // 북쪽으로 이동
for (int i = 1; i <= distance; i++) {
if (y - i < 0 || park[y - i].charAt(x) == 'X') {
return; // 이동 중 장애물을 만나면 이동 중단
}
}
point[0] -= distance; // y 좌표를 감소시켜 이동
break;
default:
break;
}
}
}
728x90
'프로그래머스(Java) > Level 1' 카테고리의 다른 글
[프로그래머스] 바탕화면 정리 (0) | 2024.08.29 |
---|---|
[프로그래머스] 개인정보 수집 유효기간 (0) | 2024.08.27 |
[프로그래머스] [PCCE 기출문제] 10번 / 데이터 분석 (0) | 2024.08.26 |
[프로그래머스] [PCCP 기출문제] 1번 / 붕대 감기 (0) | 2024.08.21 |
[프로그래머스] [1차] 다트 게임 (1) | 2024.08.20 |