たいちっち

競技プログラミングをしています

【Java】ArrayListを数値が大きい順に並べる

解いた問題

AtCoderの「B - Card Game for Two」

atcoder.jp

 

提出した回答
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処理を考える
  • ソートのアルゴリズムを正しく理解する

 

おわり。。