結果
| 問題 |
No.3 ビットすごろく
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-05-23 19:35:25 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,579 bytes |
| コンパイル時間 | 4,320 ms |
| コンパイル使用メモリ | 82,312 KB |
| 実行使用メモリ | 42,492 KB |
| 最終ジャッジ日時 | 2024-10-08 20:37:59 |
| 合計ジャッジ時間 | 12,051 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 32 |
ソースコード
package yukicoder.level2.bitsugoroku;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
public class BitSugoroku {
public static void main(String[] args) {
new BitSugoroku().execute();
}
//超単純に、すすめるだけ進んで進めなくなったら戻る。という方法を試した結果NG。(そりゃそうだ)
//→途中で戻ったほうが早いケースとかもありそう、そもそも、経路の列挙からやったほうが良いのか?
private void execute() {
int goalNum = read();
int count = 1;
int currentNum = 1;
List<Integer> stoppedNum = new ArrayList<>();
while(currentNum != goalNum) {
int numOfOneByBynary = getNumOfOneByBynary(currentNum);
int tempDest = currentNum + numOfOneByBynary;
if(stoppedNum.contains(tempDest)) {
count = -1;
break;
}
if(tempDest > goalNum) {
tempDest = currentNum - numOfOneByBynary;
}
currentNum = tempDest;
stoppedNum.add(currentNum);
if(currentNum == goalNum) {
break;
}
count++;
}
System.out.println(count);
}
private int getNumOfOneByBynary(int num) {
char[] numOfBynary = Integer.toBinaryString(num).toCharArray();
System.out.println(num);
System.out.println(numOfBynary);
Arrays.sort(numOfBynary);
String numOfBynaryString = new String(numOfBynary);
return numOfBynary.length - (numOfBynaryString.indexOf("1"));
}
private int read() {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
return sc.nextInt();
}
}