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; } }


+ Recent posts