[BOJ-JAVA]白俊2776暗唱王


リンク
https://www.acmicpc.net/problem/2776
質問する
蓮紙は記憶力が強い.だから私は一日に見たすべての精髄を覚えています.しかし、信じられない東圭は記憶力をテストすることにした.東圭は蓮鐘について行き、蓮鐘が一日見た整数を「マニュアル1」に書いた.これに基づいて、彼が真の暗記王かどうかを知るために、東圭は延宗にM個の質問をした.質問の内容は「今日Xという整数を見たことがありますか?」はい.延宗はすらすらと答え、東奎は延宗が見た数位を『マニュアル2』に記した.家に帰ってきたドンギュは、答えが正しいかどうかを確認しようとしたが、延宗についてきて疲れたので助けを求めた.東圭を助けるため、「マニュアル2」の順に数字ごとにプログラムを作成し、「マニュアル1」に1があれば、なければ0を出力します.
入力
1行目にはテストボックスの個数Tがあります.次の行に「マニュアル1」に記載の整数の個数N(1≦N≦1000000)を入力します.次の行「マニュアル1」の整数はN個あります.次の行には、「マニュアル2」に記載の整数の個数M(1≦M≦1000000)が与えられ、次の行には、「マニュアル2」に記載の整数の個数Mが入力される.すべての整数の範囲はintです.
しゅつりょく
「マニュアル2」のM数字順に、「マニュアル1」に1を出力し、「マニュアル1」に0を出力します.
に答える
import java.util.*;
import java.io.*;

public class boj_2776 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int testCase = Integer.parseInt(br.readLine());

        for (int i = 0; i < testCase; i++) {
            int N = Integer.parseInt(br.readLine());
            StringTokenizer st = new StringTokenizer(br.readLine());

            HashMap<Integer, Boolean> hm = new HashMap<>();
            for (int j = 0; j < N; j++) {
                hm.put(Integer.parseInt(st.nextToken()),true);
            }

            int M = Integer.parseInt(br.readLine());

            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < M; j++) {
                if (hm.containsKey(Integer.parseInt(st.nextToken()))){
                    bw.write("1\n");
                }
                else {
                    bw.write("0\n");
                }
            }
        }
        bw.flush();
        bw.close();
        br.close();
    }
}
説明:
  • HashMapが生成され、整数HashMapおよびpushが入力される.
  • 正解を確認する必要がある整数
  • を入力し、containsKeyで確認し、存在する場合は1、存在しない場合は0とする.
  • がタイムアウトし、StringBuilderであればなぜ失敗したのかわからないのでBufferdWriterに出力します.
  • リファレンス