본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

문제링크


BFS알고리즘을 이용한 문제이다..

처음으로 BFS를 풀어보는 것같다. 기쁘다.. 스터디 10일 만의 쾌거랄까..

근데 풀어보고 잘 동작하는 것을 확인했지만.. 다시 코딩하라고하면 한번에 못 할것같다..

좀 더 분발해야지..



import java.util.Scanner;

public class Sumbakokjil {
    static int k, j;
    static QUEUE que;
    static int[] visited;

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        k = scan.nextInt();
        j = scan.nextInt();
        selectDistance();

    }

    static public void selectDistance() {
        int counter = 0;
        visited = new int[200001];
        que = new QUEUE(200001);

        que.push(k);
        visited[k] = 1;

        while (!que.empty()) {
            int data = que.pop();
            if (visited[j] != 0) {
                System.out.println(visited[j] - 1);
                break;
            } else {
                if (data - 1 >= 0 && visited[data - 1] == 0) {
                    visited[data - 1] = visited[data] + 1;
                    que.push(data - 1);
                }
                if (data + 1 <= 100000 && visited[data + 1] == 0) {
                    visited[data + 1] = visited[data] + 1;
                    que.push(data + 1);
                }
                if (data * 2 <= 200001 && visited[data * 2] == 0) {
                    visited[data * 2] = visited[data] + 1;
                    que.push(data * 2);
                }
                // que.display();
            }
        }
    }
}

class QUEUE {
    private int front;
    private int rear;
    public int arr[];

    public QUEUE(int size) {
        this.front = -1;
        this.rear = -1;
        arr = new int[size];
    }

    public void push(int item) {
        arr[++rear] = item;
    }

    public int pop() {
        return arr[++front];
    }

    public boolean empty() {
        if (front == rear) {
            return true;
        }
        return false;
    }

    public void display() {
        for (int i = front; i <= rear; i++) {
            System.out.print(arr[i] + "::");
        }
    }
}

코드 이쁘게 올리는 법을 알아냈다.

기분이 좋다.

열심히해야지