백준10815번 문제
백준 10815번 숫자카드 문제를 풀이하였다.
두 숫자 조합들에 중복이 있는지 확인하는 문제.
단, 숫자가 매우 많으므로 시간복잡도를 줄여야 한다.
특징)
1. 입력 순서가 보장되지 않음
2. 중복이 허용되지 않음
3. null 입력 가능함
hashset은 값 자체가 고유한 주소가 되므로 값을 찾을 때 모든 값을 순회할 필요가 없다.
순서 보장이 필요하면 LinkedHashSet을 사용한다.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int N = Integer.parseInt(br.readLine()); HashSet<Integer> s1 = new HashSet<>(N); //hashset 선언 StringTokenizer st = new StringTokenizer(br.readLine(), " "); for(int i =0; i<N;i++){ s1.add(Integer.parseInt(st.nextToken())); //hashset에 값 추가 } int M = Integer.parseInt(br.readLine()); LinkedHashSet<Integer> s2 = new LinkedHashSet<>(M); //hashset 선언 StringTokenizer st2 = new StringTokenizer(br.readLine(), " "); for(int i =0; i<M;i++){ s2.add(Integer.parseInt(st2.nextToken())); //hashset에 값 추가 } StringBuilder sb = new StringBuilder(); for(int num : s2){ if(s1.contains(num)){ sb.append(1).append(' '); } else { sb.append(0).append(' '); } } System.out.print(sb.toString()); } }