
문제
https://school.programmers.co.kr/learn/courses/30/lessons/1844
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이
완전 기초 bfs이다.
거리를 잴 distance와 방문 여부를 따질 visited를 선언한 후에
좌표 [0, 0] 부터bfs를 수행한다.
범위검사, 방문여부, 벽 존재 여부를 따지면서 bfs를 수행하고
목표하던 곳이 방문되지 않았다면 -1, 그게 아니라면 distance 값을 리턴해주면 된다.
코드
import java.util.*;
class Solution {
public int[] dx = {0, 0, 1, -1};
public int[] dy = {1, -1, 0 ,0};
public int solution(int[][] maps) {
int n = maps.length;
int m = maps[0].length;
int[][] distance = new int[n][m];
boolean[][] visited = new boolean[n][m];
Queue<ArrayList<Integer>> q = new LinkedList<>();
q.add(new ArrayList<Integer>(Arrays.asList(0, 0)));
distance[0][0] = 1;
visited[0][0] = true;
while(q.peek() != null){
int x = q.peek().get(0);
int y = q.peek().get(1);
q.poll();
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx >= 0 && nx < n && ny >= 0 && ny < m
&& visited[nx][ny] == false && maps[nx][ny] == 1){
q.add(new ArrayList<Integer>(Arrays.asList(nx, ny)));
visited[nx][ny] = true;
distance[nx][ny] = distance[x][y] + 1;
}
}
}
if(visited[n-1][m-1] == false) return -1;
return distance[n-1][m-1];
}
}
후기
Queue<int[]> q = new LinkedList<>();
q.offer(new int[]{0, 0})
기본 배열 다루는게 헷갈려 list를 사용했으나, 기본배열은 위처럼 사용하면 된다.
'프로그래머스' 카테고리의 다른 글
LV3 최고의 집합 (Java) (1) | 2023.11.22 |
---|---|
LV3 야근지수 (Java) (1) | 2023.11.21 |
LV3 네트워크 (Java) (0) | 2023.11.20 |
LV3 이중우선순위큐 (0) | 2023.11.18 |
LV2 피로도 (Java) (0) | 2023.11.15 |