BFS로 풀었다.
처음에 이동 후, 그 위치가 동생과 같으면 return하게 했는데 처음부터 동생과 수빈의 위치가 같을 때 0이 출력되야하는데 그부분이 잡히지 않음.....
그냥 다 옮기고 꺼낼 때 수빈과 동생의 위치를 잡으면 됨..!
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader reader=new BufferedReader(new InputStreamReader(System.in));
StringTokenizer token=new StringTokenizer(reader.readLine());
int n=Integer.parseInt(token.nextToken());//수빈
int m=Integer.parseInt(token.nextToken());//동생
System.out.println(bfs(n,m));
}
static int jump[]={2,1,1};
static int go[]={0,1,-1};
static int visit[]=new int[100001];
static int bfs(int n,int m){
Queue<Integer> q=new LinkedList<Integer>();
q.add(n);
int count=0;
while(!q.isEmpty()){
int repeat=q.size();
while(repeat-->0){
int subin=q.poll();
if(subin==m){
return count;
}
if(visit[subin]==1){
continue;
}
visit[subin]=1;
for(int i=0;i<3;i++){//순간이동,+1,-1
int temp=subin;
temp=temp*jump[i]+go[i];
// if(temp==m){//동생을 찾으면
// return count+1;
// }
if(temp<0||temp>100000){//범위를 벗어나면
continue;
}
if(visit[temp]!=1){//아직방문전이라면
q.add(temp);
}
}
}
count++;
}
return -1;
}
}
'코딩문제' 카테고리의 다른 글
[백준알고리즘] 째로탈출2 (DFS)(백트래킹) (0) | 2018.03.23 |
---|---|
[백준알고리즘] 2048 (BFS) (0) | 2018.03.23 |
[백준알고리즘]1987 알파벳 (DFS) (0) | 2018.03.23 |
[백준알고리즘] 유기농 배추 (DFS) (0) | 2018.03.23 |
[백준알고리즘]2178 미로 탐색 (BFS) (0) | 2018.03.23 |