๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 1920 ์ˆ˜ ์ฐพ๊ธฐ

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 17.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/1920

  • N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], …, A[N]์ด ์ฃผ์–ด์ ธ ์žˆ์„ ๋•Œ, ์ด ์•ˆ์— X๋ผ๋Š” ์ •์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ฒซ์งธ ์ค„์— ์ž์—ฐ์ˆ˜ N(1 ≤ N ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ ์ค„์—๋Š” N๊ฐœ์˜ ์ •์ˆ˜ A[1], A[2], …, A[N]์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ ์ค„์—๋Š” M(1 ≤ M ≤ 100,000)์ด ์ฃผ์–ด์ง„๋‹ค.
  • ๋‹ค์Œ ์ค„์—๋Š” M๊ฐœ์˜ ์ˆ˜๋“ค์ด ์ฃผ์–ด์ง€๋Š”๋ฐ, ์ด ์ˆ˜๋“ค์ด A์•ˆ์— ์กด์žฌํ•˜๋Š”์ง€ ์•Œ์•„๋‚ด๋ฉด ๋œ๋‹ค.
  • ๋ชจ๋“  ์ •์ˆ˜์˜ ๋ฒ”์œ„๋Š” -231 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ  231๋ณด๋‹ค ์ž‘๋‹ค.
  • M๊ฐœ์˜ ์ค„์— ๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค. ์กด์žฌํ•˜๋ฉด 1์„, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด 0์„ ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • hashmap์„ ์‚ฌ์šฉํ•˜์—ฌ key๊ฐ’๊ณผ value๊ฐ’์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•ด์ฃผ๋Š”๋ฐ ์ž…๋ ฅ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์„ key๊ฐ’์œผ๋กœ ๋„ฃ์–ด์ฃผ๊ณ  value๊ฐ’์„ 1๋กœ ๋„ฃ์–ด์ค€๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ฐพ์•„์•ผ๋˜๋Š” ์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด์„œ getOrDefault๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•ด๋‹น ์ˆ˜๊ฐ€ hashmap์— key๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ์œผ๋ฉด value๊ฐ’์ธ 1์„ ์ถœ๋ ฅํ•˜๊ณ  ์—†์œผ๋ฉด default๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋Š” 0์„ ์ถœ๋ ฅํ•˜๋„๋ก ํ–ˆ๋‹ค. 

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • X

getOrDefault๋ฅผ ์ฒ˜์Œ ์จ ๋ดค๋Š”๋ฐ, ํ™•์‹คํžˆ ๊ธฐ์–ตํ•ด๋’€๋‹ค๊ฐ€ ๋‚˜์ค‘์—๋„ ์ž˜ ์จ์•ผ๊ฒ ๋‹ค..!

์ฝ”๋“œ

import java.io.*;
import java.util.*;

public class BOJ1920 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());

        // A๊ฐ’๋“ค์„ ์ €์žฅํ•  hashmap
        // key ๊ฐ’์œผ๋กœ value๋ฅผ ์ฐพ๋Š” ํ˜•์‹์œผ๋กœ, ๊ฒ€์ƒ‰์— ์œ ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ
        HashMap<Integer, Integer> hash = new HashMap<Integer, Integer>();

        StringTokenizer st = new StringTokenizer(br.readLine());

        // ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’๋“ค์„ hashmap์— key๊ฐ’๊ณผ value ๊ฐ’์ธ 1์„ ์ €์žฅ
        for(int i = 0; i < N; i++){
            int n = Integer.parseInt(st.nextToken());

            hash.put(n, 1);
        }

        int M = Integer.parseInt(br.readLine());

        StringTokenizer st2 = new StringTokenizer(br.readLine());

        for(int i = 0; i < M; i++){
            // ์ฐพ์„ ๊ฐ’
            int n2 = Integer.parseInt(st2.nextToken());

            // getOrDefault๋Š” hashmap์—์„œ key๊ฐ’์ด ์—†์„ ๋•Œ, null๊ฐ’์„ ์ถœ๋ ฅํ•˜์ง€ ์•Š๊ณ 
            // default๋กœ ์ •ํ•ด์ง„ ๊ฐ’์„ ์ถœ๋ ฅํ•จ
            // hashmap์—์„œ ์ฐพ์„ ๊ฐ’์ด key๊ฐ’์œผ๋กœ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น value ๊ฐ’์ธ 1์„ ์ €์žฅ
            // ์—†๋‹ค๋ฉด 0์„ ์ €์žฅ
            sb.append(hash.getOrDefault(n2, 0) + "\n");
        }

        System.out.println(sb);
    }
}