IT 기획의 길

백준 1920번 수찾기 [JAVA] 본문

알고리즘(백준)/문자열

백준 1920번 수찾기 [JAVA]

완벽하기 쉽지 않지만 완벽해지려고 노력해야 한다 2020. 9. 10. 01:06

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

public class 수찾기해쉬 {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(); //첫번째 case 입력
        HashSet<Integer> set=new HashSet<>();
        for(int i=0;i<n;i++){
            set.add(sc.nextInt());  //일단 첫번째 case는 HashSet에 담는다
        }

        int m=sc.nextInt(); //두번째 case 입력
        int []arr=new int[m];
        for(int i=0;i<m;i++){
            arr[i]=sc.nextInt(); //두번째 case는 배열에 저장

        }

        int []count=new int[m]; //두번째 case가 HashSet에 있으면 1 아니면 0을 저장하는 배열
        for(int i=0;i<m;i++){
            if(set.contains(arr[i])) //두번째 case가 HashSet에 있으면 1 아니면 0반환
                count[i]=1;
            else
                count[i]=0;
        }
        for(int i=0;i<m;i++){
            System.out.println(count[i]);
        }
    }
}

 

 

첫번째 case와 두번째 case를 둘다 배열에 저장하면 시간복잡도가 오래걸리지만 -> O(N^2)

첫번째 case를 HashSet에 담아놓고 두번째 case만 배열에 저장해서 인덱스로 접근해 HashSet의 요소들과 비교하면 시간복잡도가 더 작아진다. ->O(N)