티스토리 뷰
728x90
문제
- 정수 하나가 적혀있는 숫자 카드 N장을 가지고 있음
- 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 몇 개 가지고 있는지 구하기
해결방법
처음에는 10,000,000 * 2 + 1 (-10,000,000 ~ 10,000,000) 만큼 2차원 배열로 만들어 해당 숫자가 입력되면 음수일 때에는 절대값 취해서 해당 배열에 카운팅해주고, 양수도 같은 방식으로 해당하는 수의 배열 자리에 카운팅 해줄 수 있도록 코드를 작성하였는데 메모리 초과가 발생하였다.
더보기
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
int N = Integer.parseInt(br.readLine());
int[][] num = new int[10000001][2];
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i<N; i++){
int n = Integer.parseInt(st.nextToken());
if(n<0) num[Math.abs(n)][0]++;
else num[n][1]++;
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i<M; i++){
int n = Integer.parseInt(st.nextToken());
if(n<0) sb.append(num[Math.abs(n)][0]).append(" ");
else sb.append(num[n][1]).append(" ");
}
System.out.println(sb);
br.close();
}
}
그래서 HashMap을 이용하여 문제를 해결하였고, 숫자 카드를 Key로 하고 해당 카드의 개수를 Value로 두어 관리할 수 있도록 하였다.
코드
import java.io.*;
import java.util.*;
class Main{
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuffer sb = new StringBuffer();
Map<Integer, Integer> numCard = new HashMap<>();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i<N; i++){
int num = Integer.parseInt(st.nextToken());
// 숫자 카드 hashmap에 입력된 숫자가 없으면 새로 추가
if(!numCard.containsKey(num)) numCard.put(num, 1);
// 숫자 카드 hashmap에 입력된 숫자가 있으면 value + 1
else numCard.put(num, numCard.get(num) + 1);
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i<M; i++){
int num = Integer.parseInt(st.nextToken());
// 숫자 카드 hashmap에 입력된 숫자가 없으면 0 출력
if(!numCard.containsKey(num)) sb.append(0).append(" ");
// 숫자 카드 hashmap에 입력된 숫자가 있으면 해당 value 출력
else sb.append(numCard.get(num)).append(" ");
}
System.out.println(sb);
br.close();
}
}
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준] 10845번 큐(JAVA) (0) | 2022.07.28 |
---|---|
[백준] 10828번 스택(JAVA) (1) | 2022.07.28 |
[백준] 10814번 나이순 정렬(JAVA) (0) | 2022.07.25 |
[백준] 10773번 제로(JAVA) (0) | 2022.07.25 |
[백준] 10250번 ACM 호텔(JAVA) (0) | 2022.07.24 |
댓글