【Java】ArrayListを数値が大きい順に並べる
解いた問題
AtCoderの「B - Card Game for Two」
提出した回答
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); List<Integer> list = new ArrayList<>(); for (int i = 0; i < n; i++) { list.add(sc.nextInt()); } Collections.sort(list);// 小さい順のリスト Collections.reverse(list); // 大きい順のリスト int alice = 0; int bob = 0; for (int i = 0; i < list.size(); i++) { if (i % 2 == 0) { alice += list.get(i); } else { bob += list.get(i); } } int result = alice - bob; System.out.println(result); sc.close(); } }
入力された値をArrayListに入れて、小さい順にソートしてから逆順にする。
それぞれ残っているカードの中から値が一番大きいカードを取得するので、順番に取っていけば良い、という方針。
標準入力で、嵌って時間が掛かった。
入力される数の個数が分からないときに、入力された分だけArrayListに追加する、という処理を書きたくて以下のようにした。
while (sc.hasNext()) { int tmp = sc.nextInt(); list.add(tmp); }
これだと入力待機を行うようになり、うまく動作させられなかった。
EOFを示すように「^d」を入力するようにしてもダメだった。
TODO
- 入力数不明の際のScanner処理を考える
- ソートのアルゴリズムを正しく理解する
おわり。。