-
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/courses/30/lessons/172928
직사각형 격자 모양의 공원에서 로봇 강아지 산책시키기
- park는 공원이고, routes의 방향과 거리(몇칸 이동)
- result는 최종 이동 후 위치를 반환
- 공원을 벗어나거나, 장애물을 만나면 해당 명령을 무시하고 다음 명령을 수행
나의 풀이
이차원배열과 좌표를 사용하여 풀어보았습니다.
1. 이차원배열에 값 셋팅 & 시작지점 찾기
2. 방향키 자료 셋팅 (이차원배열, Map 사용)
3. 찾은 시작지점을 가지고 시작,
- routes에서 방향표 읽어서 n번 반복(예를 들어 "E"를 읽어 2번 반복) -> 도중에 범위를 벗어나거나, 장애물 만나면 명령 리셋
- 리셋하기 위해 flag를 사용하여 해당 명령이 끝까지 수행되었는지 확인함 -> 끝까지 수행되었다면 좌표값을 갱신함
(변수 x, y는 계산용 임시변수)
import java.util.*; class Solution { public int[] solution(String[] park, String[] routes) { int[] answer = new int[2]; //이차원배열 셋팅 & 시작지점 찾기 Character[][] load = new Character[park.length][park[0].length()]; int s1 =0; int s2 = 0; for(int i = 0; i < park.length; i++) { for(int j = 0; j < park[0].length(); j++) { if(park[i].charAt(j) == 'S') { s1 = i; s2 = j; } load[i][j] = park[i].charAt(j); } } // 방향 int[][] move = {{0,1}, {-1,0}, {1,0}, {0,-1}};// E, N, S, W Map<String, Integer> mMap = new HashMap<>(); mMap.put("E", 0); mMap.put("N", 1); mMap.put("S", 2); mMap.put("W", 3); // 실행 for(int r = 0; r < routes.length; r++) { int x = s1; int y = s2; String[] c = routes[r].split(" "); int num = mMap.get(c[0]); boolean flag = false; for(int n = 0; n < Integer.parseInt(c[1]); n++) { x += move[num][0]; y += move[num][1]; // 방향을 벗어나는지 if(x < 0 || x >= park.length || y < 0 || y >= park[0].length()) { break; } // 장애물을 만나는지 if(load[x][y] == 'X') { break; } if(n == Integer.parseInt(c[1])-1) { flag = true; } } // 시작점갱신 if (flag) { s1 = x; s2 = y; } } answer[0] = s1; answer[1] = s2; return answer; } }
다른 사람 풀이 보면서 참고할 만한 부분
- 시작점 찾을 때 contains라면 indexOf를 찾아 셋팅한다거나
int[] start = {0, 0}; for (int i = 0; i < park.length; i++) { if (park[i].contains("S")) { start[0] = i; start[1] = park[i].indexOf("S"); } }
- map에 값을 셋팅할 때 생성자로 입력해준다거나
mMap.put("E", new int[]{0,1});
- switch 문을 사용하면서 좌표값을 바로 계산해준다거나
- 메서드 분리를 한다거나
'자바알고리즘' 카테고리의 다른 글
[프로그래머스 LV.2] JadenCase 문자열 만들기 (java) (1) 2023.04.23 [프로그래머스 LV.1] 바탕화면 정리 (java) (0) 2023.04.07 [262가지 문제로 정복하는 코딩 인터뷰 간단요약] 8장 스택과 큐 (0) 2022.12.24 [262가지 문제로 정복하는 코딩 인터뷰 간단요약] 7장 연결리스트 (0) 2022.12.13 [262가지 문제로 정복하는 코딩 인터뷰 간단요약] 5장 배열(2) (1) 2022.12.10 댓글