-
[Programmers] 게임 맵 최단거리(Java)코딩 테스트 연습 2024. 3. 18. 19:40728x90
https://school.programmers.co.kr/learn/courses/30/lessons/1844
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
import java.util.*; class Solution { //상하좌우 이동 좌표 //그리드에서 이동하기 위해 설정. int[] dx = {0,1,-1,0}; int[] dy = {1,0,0,-1}; //(dx[0],dy[0]) = 오른쪽으로 한칸.(0,1) //(dx[1],dy[1]) = 아래로 한칸.(1,0) public int solution(int[][] maps) { int answer = 0; //최종 목적지까지 최단 거리 구하기 (BFS) // BFS => 큐 int [][] visited = new int[maps.length][maps[0].length]; //maps의 m x n 의 값을 받아서 2차원 배열 초기화 bfs(maps, visited); answer = visited[maps.length - 1][maps[0].length -1]; if(answer == 0){ answer = -1; } return answer; } public void bfs(int[][] maps, int[][] visited){ Queue<int[]> q = new LinkedList<>(); //정수 배열을요소로 가지는 큐 선언. LinkedList<>로 큐 구현 q.add(new int[]{0,0}); //큐에 첫 번째 요소 추가.(탐색 시작 지점 추가) visited[0][0] = 1; while(!q.isEmpty()){ int[] current = q.poll(); //큐에 저장된 다음 요소를 current에 저장. //current를 통해 현재 좌표를 각각 X, Y로 저장. int X = current[0]; int Y = current[1]; for(int i=0; i < 4; i++){ //상,하,좌,우로 이동. int nX = X + dx[i]; int nY = Y + dy[i]; //그리드의 범위 내인지 확인. if(nX < 0 || nX > maps.length - 1 || nY <0 || nY > maps[0].length -1){ continue; } //새로 계산된 위치 nX ,nY가 방문하지 않고, 벽이 없으면. if(visited[nX][nY] == 0 && maps[nX][nY] == 1){ //(nX, nY) 위치 방문 표시, 이동 횟수 저장 visited[nX][nY] = visited[X][Y] + 1; //(nX, nY)를 큐에 추가. q.add(new int[]{nX, nY}); } } } } }
728x90'코딩 테스트 연습' 카테고리의 다른 글
Dynamic Programming (프로그래머스 등굣길 with Java) (0) 2024.03.21 [Programmers] 피보나치 수(Java) (0) 2024.03.19 [Programmers] 문자열 곱하기(Java) (0) 2023.11.09 [프로그래머스] 대소문자 바꿔서 출력하기(java) (0) 2023.11.01 배열 관련 코딩테스트 연습 (1) 2023.10.28