반응형
BFS를 통해 푸는 문제이다. 물론 DFS로 문제를 풀 수 있을 것 같다.
나는 세가지 변수를 설정했다.
1. 1촌 관계를 저장하는 배열 : Arr[][2]
2. 방문했던 점을 저장하는 배열 : visited[]
3. 얼마만큼 지나왔는지 저장하는 배열 : total[]
세가지만 이용하면 쉽게 문제를 풀 수 있다.
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.io.FileInputStream; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int[][] arr; static boolean[] visited; static int[] total; static int x; static int y; public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Scanner sc = new Scanner(new FileInputStream("input.txt")); int N = sc.nextInt(); arr = new int[N + 1][2]; //1촌관계를 저장할 배열 visited = new boolean[N + 1]; // 방문했던 값을 다시 방문하면 무한루프에 빠지게 된다. total = new int[N + 1]; //몇칸을 거쳐왔는지에 대한 배열 x = sc.nextInt(); //입력 X값 y = sc.nextInt(); //입력 Y값 int K = sc.nextInt(); for (int i = 1; i <= K; i++) { arr[i][0] = sc.nextInt(); arr[i][1] = sc.nextInt(); } System.out.println(BFS(x, N)); } public static int BFS(int x, int N) { Queue<Integer> q = new LinkedList<Integer>(); q.add(x); //큐가 비었으면 연결이 끊어졌다는 소리이다. while (!q.isEmpty()) { int nextX = q.poll(); visited[nextX] = true; //방문한 점은 true로 바꿈으로써 재방문 하지 안도록 한다. for (int i = 0; i < N; i++) { //전체 배열을 돌면서 연결되있으면서 방문 안한점이 있나 체크한다 //있다면 큐에 넣어준다. if (arr[i][0] == nextX && !visited[arr[i][1]]) { //1촌관계가 랜덤으로 되어있으므로 왼쪽 라인 한번 q.add(arr[i][1]); //이전에서 +1 된 값을 저장한다 total[arr[i][1]] = total[arr[i][0]] + 1; } else if (arr[i][1] == nextX && !visited[arr[i][0]]) { //오른쪽 라인 한번 q.add(arr[i][0]); //이전에서 +1된값을 저장한다. total[arr[i][0]] = total[arr[i][1]] + 1; } } //q가 비었거나 찾는값이 있으면 종료한다. if (!q.isEmpty() && q.peek() == y) { return total[y]; } } return -1; } } | cs |
문제에 나와있지 않은 예시를 하나 들자면.
10
7 6
9
1 2
1 3
1 4
9 1
9 10
3 5
3 6
2 7
2 8
이 있다. 이때의 결과값은 4가 나와야 한다.
반응형
'나는요 공부가 좋....은걸... > 알고리즈음' 카테고리의 다른 글
[BOJ] 백준 1427 - 소트인사이드 (자바) (0) | 2018.01.12 |
---|---|
[BOJ] 백준 1931 - 회의실 배정 (자바) (1) | 2018.01.11 |
[BOJ] 백준 11507 - 오르막 수 (자바) (0) | 2018.01.10 |
[BOJ] 백준 10409 - 서버 (자바) (0) | 2018.01.08 |
[BOJ] 백준 10989 - 수 정렬하기 3 (자바) (3) | 2018.01.08 |