こんにちわ
グローバルセンス株式会社のskanehiraです。
以前、こちらの記事で紹介したAOJですが
タイトルの問題を解いてみました。
簡単なアルゴリズムでありますが
読みやすく効率よくを意識しながら組んでみました。
問題
問題はこちらになります。
単純な問題で
入力した数字の大小を比較して出力するだけです。
aとbの位置が変わらないので
記号のみが条件によって変わるイメージですね。
ソース
一応判定では正解なので載せます。
もっと良い書き方無いかな…
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] line = scan.nextLine().split(" ");
int[] inputs = new int[2];
int input;
// -1,000 ≤ a, b ≤ 1,000
for (int i = 0; i < line.length; i++) {
input = Integer.parseInt(line[i]);
if (input < -1000 || 1000 < input ) System.exit(-1);
inputs[i] = input;
}
int a = inputs[0];
int b = inputs[1];
System.out.println("a " + (a < b ? "<": a > b ? ">" : "==") + " b" );
scan.close();
}
}
三項演算子を2重で使っているので多少わかりづらいかもしれないが、
これでだいぶ短縮できたのではないかなと思います。
判定処理をメソッドにするなら以下の様になると思います。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String[] line = scan.nextLine().split(" ");
int[] inputs = new int[2];
int input;
// -1,000 ≤ a, b ≤ 1,000
for (int i = 0; i < line.length; i++) {
input = Integer.parseInt(line[i]);
if (input < -1000 || 1000 < input ) System.exit(-1);
inputs[i] = input;
}
System.out.println("a " + getSymbol(inputs[0], inputs[1]) + " b" );
scan.close();
}
public static String getSymbol(int a, int b) {
String symbol = "==";
if (a < b) {
symbol = "<";
} else if (a > b){
symbol = ">";
}
return symbol;
}
}
最後に
入力の部分、もう少し省けそうな気がしますが
今のところ思い付きません!
こうすると
もっと短縮できる
メモリ使用量が減る
実行時間が減る
などのアドバイスを頂けたら嬉しいですm(_ _)m