【白俊】10816番:デジタルカード2
9780 ワード
📝 質問する
問題を見ると、デジタルカードの数をキーにしたHashMapを作れば簡単に解けると思います.
しかし、タイムアウトが発生し続けた.
並び方でもタイムアウトすると思うので、HashMapを使った解答でいかに時間を減らすかを考えました.
1. getOrDefault
最初に,テンキー値を受信した場合,条件文で入力すると+1,なければ1となる.コードgetOrDefaultに短縮
2. StringBuilder
私は今まで使うのがおっくうで、時間がどれだけ減るか...このような考えからStringBuilderは使用されなかった.しかし,この問題は入力mサイズに等しい数字を出力し,繰り返し文にSystemを入力する必要がある.out.プリントドアがあれば結構時間がかかると思います.なのでStringBuilderを使いました.
この2つの修正コードで通過できます.
しかし、私が考えた解(長さ20000001の配列方法を用いる)で解く時間はもっと少ない.今回はKakacotteでhashmapで解題して勉強になりましたね.
📌コード#コード# package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class BOJ10816 {
public static void main(String[] args) throws IOException {
HashMap<Integer, Integer> hm = new HashMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++){
int cur = Integer.parseInt(st.nextToken());
hm.put(cur, hm.getOrDefault(cur, 0) + 1);
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 0; i < m; i++){
int cur = Integer.parseInt(st.nextToken());
sb.append(hm.getOrDefault(cur, 0)).append(" ");
}
System.out.println(sb);
}
}
Reference
この問題について(【白俊】10816番:デジタルカード2), 我々は、より多くの情報をここで見つけました
https://velog.io/@paulus0617/boj10816
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
package Baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class BOJ10816 {
public static void main(String[] args) throws IOException {
HashMap<Integer, Integer> hm = new HashMap<>();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++){
int cur = Integer.parseInt(st.nextToken());
hm.put(cur, hm.getOrDefault(cur, 0) + 1);
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
for(int i = 0; i < m; i++){
int cur = Integer.parseInt(st.nextToken());
sb.append(hm.getOrDefault(cur, 0)).append(" ");
}
System.out.println(sb);
}
}
Reference
この問題について(【白俊】10816番:デジタルカード2), 我々は、より多くの情報をここで見つけました https://velog.io/@paulus0617/boj10816テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol