코딩공작소
[프로그래머스] 리코쳇 로봇 본문
https://school.programmers.co.kr/learn/courses/30/lessons/169199
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
:: 간만에 풀었던 BFS 그래프 문제
:: 상화좌우 이동을 잘 구현하는 것이 핵심이었던 것 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | import java.util.*; import java.awt.Point; class Solution { //상, 하, 좌, 우 int []dx = {-1,1,0,0}; int []dy = {0,0,-1,1}; public int solution(String[] board) { int answer = -1; int row = board.length; int col = board[0].length(); Queue<Point> q = new LinkedList<Point>(); int [][]map = new int[row][col]; int start_row = 0, start_col = 0; int end_row = 0, end_col = 0; //setting into integer map for(int i=0 ; i < row ; i++){ for(int j=0 ; j < col ; j++){ if(board[i].charAt(j) == 'R'){ start_row = i; start_col = j; q.add(new Point(i,j)); }else if(board[i].charAt(j) == 'D'){ map[i][j] = -1; }else if(board[i].charAt(j) == 'G'){ end_row = i; end_col = j; } } } while(!q.isEmpty()){ Point p = q.poll(); int x = p.x, y = p.y; for(int i=0 ; i<4 ; i++){ int nx = x, ny = y; while(nx + dx[i] >= 0 && nx + dx[i] < row && ny + dy[i] >= 0 && ny + dy[i] < col && map[nx+dx[i]][ny+dy[i]] != -1){ nx += dx[i]; ny += dy[i]; } if(nx == start_row && ny == start_col) continue; if(map[nx][ny] == 0){ q.add(new Point(nx,ny)); map[nx][ny] = map[x][y] + 1; if(nx == end_row && ny == end_col){ return map[nx][ny]; } } } } return answer; } } | cs |
'알고리즘 > 그래프' 카테고리의 다른 글
[프로그래머스] PCCP 기출문제 2번 / 석유 시추 (0) | 2023.11.27 |
---|---|
[프로그래머스]카카오예선_BFS (0) | 2021.04.20 |
BackTracking (0) | 2021.04.20 |
[프로그래머스]여행경로 (0) | 2019.10.27 |
[프로그래머스]단어변환 (0) | 2019.10.26 |