[BFS] - Lv2 - 미로탈출

2023. 10. 6. 21:02· 알고리즘/문제
목차
  1. 🔥 - Java 코드

https://school.programmers.co.kr/learn/courses/30/lessons/159993

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

🌿 - 문제설명

🌿 - 제한사항

 

📌- 풀이

경우의 수 문제로 몇번 접해본 기억이 있어서 비슷하게 해결했습니다.

중간 지점을 무조건 들려야 하기 때문에 처음 시작 지점 -> 중간 지점까지와 중간 지점 -> 도착 지점을

두 가지로 분리해서 계산하면 결과가 나오게 됩니다.

  1. 여기서는 경우의 수를 계산하는 것이 아니라 완전탐색을 해야하기 때문에 BFS로 처음 지점 -> 중간지점
  2. 중간지점을 시작 지점으로 중간 지점 -> 도착 지점

 

Node result= bfs(bfs(node, map1,'L'),map2,'E'); // map1 = S->L, map2 = L->E 

 

이렇게 2번 BFS를 하게되면 결과값이 나오게 됩니다.

 

🔥 - Java 코드

 


  
import java.util.*;
class Solution {
static char[][] map1, map2; // map1 = S부터 L까지 사용, map2= L부터 E까지 찾을 때
static int[] dx = {0,0,1,-1};
static int[] dy = {1,-1,0,0};
static int N,M;
public int solution(String[] maps) {
int answer = 0;
N = maps.length;
M = maps[0].length();
map1 = new char[N][M];
map2 = new char[N][M];
Node node = null;
for(int i=0;i<N;i++){ // map1,2 셋팅
for(int j=0;j<M;j++){
char c = maps[i].charAt(j);
map1[i][j] = c;
map2[i][j] = c;
if(c == 'S'){
node = new Node(i,j,0); // 시작 노드 생성
}
}
}
Node result= bfs(bfs(node, map1,'L'),map2,'E'); // map1 = S->L, map2 = L->E 하기 위함
answer = result.depth;
return answer;
}
public Node bfs(Node start, char[][] map, char find){
if(start.depth == -1){ // depth가 -1이면 도착할 수 없는 경우이므로 종료
return new Node(0,0,-1);
}
Queue<Node> que = new LinkedList<>();
que.add(start);
while(!que.isEmpty()){
Node next= que.poll();
if(map[next.x][next.y] == find){
return next;
}
for(int i=0;i<4;i++){
int nx = next.x + dx[i];
int ny = next.y + dy[i];
if(0<= nx && nx < N && 0<= ny && ny < M && map[nx][ny] != 'X'){
que.add(new Node(nx,ny,next.depth +1));
if(map[nx][ny] != find){
map[nx][ny] = 'X';
}
}
}
}
return new Node(0,0,-1);
}
}
class Node {
int x,y;
int depth;
Node(int x, int y, int depth){
this.x= x;
this.y = y;
this.depth = depth;
}
}
  1. 🔥 - Java 코드
'알고리즘/문제' 카테고리의 다른 글
  • [구현] - Lv2 - 택배 배달과 수거하기
  • [완전탐색] - Lv2 - 2023 KAKAO BLIND RECRUITMENT - 이모티콘 할인 행사
  • [그리디] - Lv2 - 광물 캐기
  • [우선순위큐/스택] - Lv2 - 과제 진행하기
Casteira
Casteira
할 뿐
Casteira
SpongeCake
Casteira
전체
오늘
어제
  • __Main__ (104)
    • 알고리즘 (65)
      • 개념 (6)
      • 문제 (58)
    • 컴퓨터 구조 (9)
      • 자료 구조 (2)
      • OS (7)
    • 웹 (1)
      • 자바 (1)
      • 스프링 (5)
      • SQL (0)
    • 기록 (4)
      • 포트폴리오 (2)
    • 정글 (18)
      • TIL (17)

블로그 메뉴

  • 🗒️ 깃허브
  • 태그
  • 방명록
  • 관리

공지사항

인기 글

태그

  • 크래프톤 정글
  • annotation
  • spring
  • framework
  • 코딩테스트
  • 백준 골드
  • 정글
  • 크래프톤
  • dp
  • java
  • 백준
  • springboot

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.1
Casteira
[BFS] - Lv2 - 미로탈출
테마상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.