공부방

HashSet 본문

문법/알고리즘

HashSet

코딩 화이팅 2023. 6. 12. 11:34

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

package class2;

import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;

public class 수찾기_1_1920 {
    public static void main(String[] args) {
        // Scanner 객체를 생성하여 사용자로부터 입력을 받는다.
        Scanner sc = new Scanner(System.in);

        // 첫 번째 입력으로 정수 n을 받아서 저장한다.
        int n = sc.nextInt();

        // HashSet 객체를 생성하여 n개의 정수를 저장한다. HashSet은 중복을 허용하지 않는다.
        // 또한 HashSet의 contains 메서드는 일반적으로 O(1)의 시간 복잡도를 가지므로 특정 요소의 존재 여부를 빠르게 확인할 수 있다.
        Set<Integer> N = new HashSet<>();
        for (int i = 0; i < n; i++) {
            N.add(sc.nextInt());
        }

        // 두 번째 입력으로 정수 m을 받아서 저장한다.
        int m = sc.nextInt();

        // 결과를 저장할 배열 ans를 선언한다. 배열의 초기값은 모두 0이다.
        int[] ans = new int[m];

        // m개의 정수를 입력받아서 해당 정수가 HashSet에 존재하는지 확인한다.
        // 존재한다면 ans 배열의 해당 인덱스 위치의 값을 1로 변경한다.
        for (int i = 0; i < m; i++) {
            if (N.contains(sc.nextInt())) {
                ans[i] = 1;
            }
        }

        // ans 배열의 값을 모두 출력한다. 해당 위치의 숫자가 N 집합에 존재하면 1, 그렇지 않으면 0을 출력한다.
        for (int value : ans) {
            System.out.println(value);
        }
    }
}

HashSet 객체를 생성하여 n개의 정수를 저장한다. HashSet은 중복을 허용하지 않는다.
또한 HashSet의 contains 메서드는 일반적으로 O(1)의 시간 복잡도를 가지므로 특정 요소의 존재 여부를 빠르게 확인할 수 있다.

이 부분을 통해 HashSet을 사용하면 존재 여부를 더욱 빠르게 알 수 있다.

'문법 > 알고리즘' 카테고리의 다른 글

Math.pow  (0) 2023.09.02
dfs로봇 청소기(4방 탐색)  (0) 2023.06.04
dp-파스칼의 삼각형  (0) 2023.05.09
그리디/2차배열 정렬/회의실 배정  (0) 2023.04.27
bfs문제(토마토)  (0) 2023.04.15