白駿16953号(ジャワ)
BFS
BFSを用いて白駿16953号をJavaと解釈した.これは想像以上に簡単な問題のようで、実際にはすぐにコードを完成して提出しましたが、結果はずっと間違っていました.IntelliJで自分で値を入力したときは効果的でしたが、なぜいつもミスをしているのか、本当にわかりません.
最後に他の人の解答を参考にして、変数のタイプはint
ではなくlong
であるべきであることは発見されなかった.これまでアルゴリズム学習は多くなく,いつあるアルゴリズムを用いる必要があるか,入力値の範囲に応じて適切なtypeを選択することも未熟であった.
与えられた入力値の範囲は20億を超えないに違いないが、なぜlong
を使うのか、私は一人でしばらく悩んだ.
どうしてlongを使うの?
5億を10億にすると、2つの演算のうち、最後の演算でプラス1の演算を行うと、Queueは50億+1が必要になるのでオーバーフローが発生します!int
ではなくlong
を使用する必要があります.
次は私が提出したコードです.import java.util.*;
import java.io.*;
public class boj16953 {
static long a,b;
static int cnt;
static int bfs(){
Queue<Long> q = new LinkedList<>();
q.add(a);
while(!q.isEmpty()){
int size = q.size();
for(int i=0; i<size; i++){
long tmp = q.poll();
if(tmp==b)
return cnt+1;
if(tmp*2<=b) q.add(tmp*2);
if(tmp*10+1<=b) q.add(tmp*10+1);
}
cnt++;
}
return -1;
}
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(bfr.readLine());
a = Long.parseLong(stk.nextToken());
b = Long.parseLong(stk.nextToken());
System.out.println(bfs());
}
}
Reference
この問題について(白駿16953号(ジャワ)), 我々は、より多くの情報をここで見つけました
https://velog.io/@topqr123q/백준-16953번-자바
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
import java.util.*;
import java.io.*;
public class boj16953 {
static long a,b;
static int cnt;
static int bfs(){
Queue<Long> q = new LinkedList<>();
q.add(a);
while(!q.isEmpty()){
int size = q.size();
for(int i=0; i<size; i++){
long tmp = q.poll();
if(tmp==b)
return cnt+1;
if(tmp*2<=b) q.add(tmp*2);
if(tmp*10+1<=b) q.add(tmp*10+1);
}
cnt++;
}
return -1;
}
public static void main(String args[]) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(bfr.readLine());
a = Long.parseLong(stk.nextToken());
b = Long.parseLong(stk.nextToken());
System.out.println(bfs());
}
}
Reference
この問題について(白駿16953号(ジャワ)), 我々は、より多くの情報をここで見つけました https://velog.io/@topqr123q/백준-16953번-자바テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol