Notice
Recent Posts
Recent Comments
Link
CodeClover
[JAVA] 백준 10816_숫자카드2 본문
https://www.acmicpc.net/problem/10816

📌 문제 탐색하기
상근이가 가지고 있는 숫자카드의 개수 N , N개의 카드들 , 정수 M , M개의 카드들이 입력된 값에서 각각 입력된 M개의 정수들이 N개의 숫자카드에 있는 숫자만큼 출력하는 문제이다.
https://www.acmicpc.net/problem/10815 이 문제의 응용버전... !
📌 가능한 시간복잡도
N개의 숫자 저장 하고 조회하는 과정에서 O(N) , O(M) 만큼의 시간복잡도 ....
따라서 가능한 시간복잡도는 O(N) + O(M) 입니다.
📌 코드 설계하기
시간복잡도를 잘 생각해서 풀어야하는 문제이다. 조건에 보면 50만개의 숫자에 대해서 체크해야하는 문제이므로 단순한 반복으로 해결 가능 . 우선, 상근이가 가지고 있는 숫자 카드를 COUNT하고 - 찾고 싶은 M개의 숫자일때마다 COUNT++ 처리
📌 정답 코드
import java.io.*;
import java.util.*;
public class Main {
public static int[] solution(int[] cards, int[] queries) {
Map<Integer, Integer> map = new HashMap<>();
for (int card : cards) {
map.put(card, map.getOrDefault(card, 0) + 1);
}
int[] result = new int[queries.length];
for (int i = 0; i < queries.length; i++) {
result[i] = map.getOrDefault(queries[i], 0);
}
return result;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
int[] cards = new int[N];
for (int i = 0; i < N; i++) {
cards[i] = Integer.parseInt(st.nextToken());
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
int[] queries = new int[M];
for (int i = 0; i < M; i++) {
queries[i] = Integer.parseInt(st.nextToken());
}
int[] count = solution(cards, queries);
StringBuilder sb = new StringBuilder();
for (int c : count) sb.append(c).append(" ");
System.out.println(sb);
}
}'코딩테스트' 카테고리의 다른 글
| [JAVA] 백준 2606_바이러스 (0) | 2025.04.17 |
|---|---|
| [JAVA] 백준 1260_DFS와 BFS (0) | 2025.04.16 |
| [JAVA] 백준 4158_CD (1) | 2025.04.11 |
| [JAVA] 백준 1244_스위치 켜고 끄기 (0) | 2025.04.10 |
| [JAVA] 백준 1251_단어 나누기 (2) | 2025.04.09 |