코드를 검토해 보겠습니다.
코드는 대부분 올바르게 작성되었습니다. 그러나 몇 가지 개선할 점이 있습니다.
숫자 카드를 정렬한 후에 검색하는 부분에서, 이진 검색 대신에 해시맵을 사용하면 시간 복잡도를 더 줄일 수 있습니다. 숫자 카드의 숫자들을 해시맵에 저장하여 각 숫자의 등장 횟수를 쉽게 구할 수 있습니다.
해시맵을 사용하면 불필요한 정렬 과정을 피할 수 있으며, 입력 배열의 크기가 매우 큰 경우에도 효율적으로 동작할 수 있습니다.
또한, 문제의 조건에 따라서 숫자의 범위가 -10,000,000부터 10,000,000까지이므로, 이를 고려하여 해시맵의 크기를 설정해야 합니다.
개선된 코드를 보시겠어요?
응
ChatGPT
좋아요, 개선된 코드를 보여드리겠습니다.
java
코드 복사
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.HashMap;
class Main{
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 N = Integer.parseInt(br.readLine());
int[] arrCard = new int[N];
String[] input = br.readLine().split(" ");
// 숫자 카드의 숫자들을 배열에 저장
for (int i = 0; i < N; i++)
arrCard[i] = Integer.parseInt(input[i]);
// 해시맵을 사용하여 각 숫자의 등장 횟수를 저장
HashMap<Integer, Integer> countMap = new HashMap<>();
for (int i = 0; i < N; i++) {
int num = arrCard[i];
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
// 주어진 정수의 갯수
int M = Integer.parseInt(br.readLine());
int[] arrNum = new int[M];
String[] input2 = br.readLine().split(" ");
// 주어진 정수들을 배열에 저장하면서 등장 횟수 출력
for (int i = 0; i < M; i++) {
arrNum[i] = Integer.parseInt(input2[i]);
int count = countMap.getOrDefault(arrNum[i], 0);
bw.write(count + " ");
}
br.close();
bw.flush();
bw.close();
}
}
이렇게 해시맵을 사용하여 불필요한 정렬을 피하고, 각 숫자의 등장 횟수를 효율적으로 구할 수 있습니다. 어떠세요?