본문 바로가기
PS/Baekjoon

[Baekjoon] 10816 - 숫자 카드 2

by 서현 SEOHYEON 2023. 6. 11.

📝 문제

 

 

🔑 풀이 과정

10815번 숫자 카드 문제랑 다른 조건은 다 똑같고, 이 문제는 같은 카드를 입력 받을 수 있다는 것, 카드의 개수를 출력해야 한다는 점이 다른 것.

10815번 문제는 정렬 + 이분 탐색을 사용해서 존재 여부를 출력했다.

 

이번 10816번 문제는 Map에 key를 숫자 카드에 적힌 정수, value를 숫자 카드의 개수로 담아서 해결했다.

 

· 처음 상근이가 가지고 있는 숫자 카드들을 입력 받을 때

Map이 입력받은 숫자를 key로 가지고 있지 않으면 처음 입력 한다는 것 → put(숫자, 1) 을 넣어주자. (1개 있다는 뜻)

Map이 입력받은 숫자를 key로 가지고 있다면 이미 숫자카드를 가지고 있다는 것. 개수를 추가해 주어야 한다. → replace(숫자, 기존 value + 1)

 

· 몇 개 가지고 있는지 숫자 카드인지 입력 받을 때

Map이 입력받은 숫자를 key로 가지고 있다면 key에 매칭되는 value 출력

Map이 입력받은 숫자를 key로 가지고 있지 않다면 0 출력

 

 

 

🔓 답안

import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public 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));
        StringTokenizer st;

        Map<Integer, Integer> map = new HashMap<>();

        //숫자 카드 N개 입력 받기
        int N = Integer.parseInt(br.readLine());

        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < N; i++){
            int item = Integer.parseInt(st.nextToken());

            if(!map.containsKey(item))  //map에 숫자카드가 처음 등록될 때
                map.put(item, 1);
            else if(map.containsKey(item)) //map에 숫자카드가 이미 있을 때
                map.replace(item, map.get(item) + 1);
        }

        //M개의 숫자 카드 입력받고, 개수 출력하기
        int M = Integer.parseInt(br.readLine());

        st = new StringTokenizer(br.readLine());
        for(int i = 0; i < M; i++){
            int item = Integer.parseInt(st.nextToken());

            if(map.containsKey(item))  //map에 입력된 숫자카드가 있으면 개수 출력
                bw.write(map.get(item) + " ");
            else if(!map.containsKey(item)) //map에 입력된 숫자카드가 없으면 0 출력
                bw.write("0 ");
        }

        bw.flush();
        bw.close();
    }

}

 

 

 

🖤 알고리즘 분류

- 자료 구조

- 정렬

- 이분 탐색

- 해시를 사용한 집합과 맵

'PS > Baekjoon' 카테고리의 다른 글

[Baekjoon] 18110 - solved.ac  (0) 2023.06.13
[Baekjoon] 1676 - 팩토리얼 0의 개수  (0) 2023.06.12
[Baekjoon] 10845 - 큐  (0) 2023.06.10
[Baekjoon] 10815 - 숫자 카드  (2) 2023.06.09
[Baekjoon] 10162 - 전자레인지  (0) 2023.06.08

댓글