BFS의 아주 기본이 되는 문제라고 할 수 있다.
크게 까다로운 조건은 없는 것 같다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.LinkedList; import java.util.Queue; import java.util.Set; class Main{ public static void main(String[] args) throws IOException { BufferedReader in=new BufferedReader(new InputStreamReader(System.in)); String input=in.readLine(); int SN=Integer.parseInt(input.split(" ")[0]); int BN=Integer.parseInt(input.split(" ")[1]); Queuequeue=new LinkedList<Integer>();//BFS수행에 필요한 큐 Set<Integer> check=new HashSet<>();//해당 좌표를 지났는지의 여부 확인을 위한 Set int dist[]=new int[100001];//현 위치에서 index까지 이동한 거리 저장 // x-1, x+1. 2*x dist[SN]=0; check.add(SN); queue.add(SN);//처음위치 while(!queue.isEmpty()) { int now=queue.poll(); if(now==BN) { System.out.println (dist[now]); return; } if(!check.contains(now-1) && now-1 >l=0) { queue.add(now-1); check.add(now-1); dist[now-1]=dist[now]+1; } if(!check.contains(now+1) && now+1<=100000) { queue.add(now+1); check.add(now+1); dist[now+1]=dist[now]+1; } if(!check.contains(now*2) && now*2 <=100000) { queue.add(now*2); check.add(now*2); dist[now*2]=dist[now]+1; } } in.close(); }
'이론 > 문제풀이' 카테고리의 다른 글
[백준알고리즘 -1525] 퍼즐 - java (BFS) (0) | 2018.08.27 |
---|---|
[백준알고리즘 - 9019] DSLR - java (BFS) (0) | 2018.08.26 |
[백준 알고리즘 - 6603] 로또 -java(중복된 수가 있는 집합의 순열) +(20180901 백트래킹 코드 추가) (0) | 2018.08.23 |
[백준-10992] 별 찍기 17 -Java (0) | 2018.08.16 |
[Codility] Lesson 6- GenomicRangeQuery (0) | 2018.08.12 |