티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday