1

この種の入力を解析する必要があります。

  • 最初の行:以下で定義されるシンボルの数を示すint 値n ( 1 <= n <= 26 ) を含みます
  • 例のようにフォーマットされたn行。括弧内の値は、 空白で区切られた0、1、...、9のみです。最初の記号は文字 ( A, ... , Z ) です。

各記号 (AZ) は、関連する行のすべての値を含むセットを定義します。{ }空集合を表します。1 つのシンボルを繰り返すことはできません。

入力例:

3
Z = { 5 6 2 }
X = { 2 5 7 }
Y = { 2 4 3 0 }

また

2
X = { 7 }
Y = { }

これらのセットを保存し、関連付けられたシンボルで識別しなければなりません。目標を達成するために、各記号がマップのキーである< , > カップルMapを格納する Java を使用しました。set_idset_valuesset_id

HashMap<Character, List<Integer>> sets = new HashMap<Character, List<Integer>>();

これが残りのコードです。別の方法を見つけてパフォーマンスを改善するためのアドバイスを誰かがくれたらいいのにと思います。

    BufferedReader r =
            new BufferedReader (new InputStreamReader(System.in));
    String line = null;

    /* Stores couple <Set_id, Set_values> */
    HashMap<Character, List<Integer>> sets = new HashMap<Character, List<Integer>>();

    /* number of sets, first line parsed */
    int n_sets = Integer.parseInt(r.readLine());

    Character set_id = null;
    Character current = null;
    List<Integer> set_values = null;

    System.out.println("DEBUG: Will perform "+n_sets+" iteration");
    while(n_sets != 0){
        set_values = new ArrayList<Integer>();
        line = r.readLine();
        set_id = new Character(line.charAt(0));

        /* Set input example : Z = { 5 6 2 } */
        for(int i=0; i<line.length(); i++){
            current = line.charAt(i);
            /* Fill values list for current set */
            if(Character.isDigit(current))
                set_values.add(Integer.parseInt(current.toString()));
        }

        /*Put current <set_id, set_values> into map */
        sets.put(set_id, set_values);
        -- n_sets;
    }
4

1 に答える 1