티스토리 뷰

해결방법

미로찾기 문제인데, 상하좌우로 길이 있는지 방문합니다. 길이 있으면 BFS로 데이터를 집어 넣고 

한개씩 빼면서 그 다음 곳을 방문하는 것을 반복하면 됩니다.

DFS로 하면 깊이탐색이기 때문에 최악의 거리가 나올 가능성이 많기 때문에 사용하시면 안됩니다.

 

BFS는 주변부터 탐색이기 때문에 탐색하면서 최종 도착지가 나오면 그 값이 최단 거리이기 때문입니다.

 

이번에는 자바로 해봤습니다.

소스코드

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Deque;

public class Solution {
	public static void main(String[] args) {
	int[] x = { 0, 0, -1, 1 };
	int[] y = { 1, -1, 0, 0 };
	int visit[][];
	public int solution(int[][] maps) {
		int answer = -1;
		int count=1;
		visit = new int[maps.length][maps[0].length];
		Deque<Data> position = new ArrayDeque<>();
		Data end = new Data(maps[0].length, maps.length);
		Data start = new Data(0, 0);
		visit[0][0]=1;
		position.add(start);
		while (!position.isEmpty()) {
			Data data = position.pollFirst();
			for (int i = 0; i < 4; i++) {
				if (overflow(data.xpos, x[i], data.ypos, y[i],maps, end)) {	//경계 밖 처리
					Data next=new Data(data.xpos+x[i],data.ypos+y[i]);
					
					if(data.xpos+x[i]==end.xpos-1&&data.ypos+y[i]==end.ypos-1) {	//결과 값
						answer=visit[data.ypos][data.xpos]+1;
						return answer;
					}
					
					if(visit[data.ypos+y[i]][data.xpos+x[i]]==0) {	//방문
						position.addLast(next);
						System.out.println("x="+(data.xpos+x[i])+"  y="+(data.ypos+y[i]));
						visit[data.ypos+y[i]][data.xpos+x[i]]=visit[data.ypos][data.xpos]+1;
					}
					
				}
			}
		}
		return answer;
	}

	public boolean overflow(int x1, int x2, int y1, int y2,int[][] maps, Data end) {
		if (x1 + x2 < 0 || x1 + x2 >= end.xpos) return false;
		if (y1 + y2 < 0 || y1 + y2 >= end.ypos) return false;
		if(maps[y1+y2][x1+x2]==0) return false;
		return true;
	}

}

class Data {
	public int xpos;
	public int ypos;

	public Data(int xpos, int ypos) {
		this.xpos = xpos;
		this.ypos = ypos;
	}
}

'알고리즘 > 프로그래머스(JAVA)' 카테고리의 다른 글

[프로그래머스/알고리즘] 폰켓몬  (0) 2019.05.28
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함