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] + "::"); } } }
코드 이쁘게 올리는 법을 알아냈다.
기분이 좋다.
열심히해야지
'알고리즘 및 자료구조 > 문제' 카테고리의 다른 글
백준알고리즘 1946번 신입사원 (0) | 2016.03.03 |
---|---|
백준알고리즘 2167번 2차원 배열의 합 (0) | 2016.03.03 |
algospot URI Decoding (0) | 2016.02.28 |
백준알고리즘 11399번 ATM (0) | 2016.02.28 |
백준알고리즘 1541번 잃어버린 괄호 (0) | 2016.02.27 |