본문 바로가기
java

백준 10815 숫자 카드 자바 java

by MiaCoder 2024. 1. 22.

이번 문제는 또한 시간내에 해결하는 것이 중요하다.

 

입력 값의 범위를 고여하면 약 10,000,000 * 500,000이 되므로 

 

일일히 값을 비교하는 방법은 사용할 수 없다.

 

그렇다면 다른 방법을 생각해보아야한다.

 

이 부분은 다른 사람의 포스트를 참고하여 만들었다.

 

HashMap를 사용하여 만들어 보자.

 

HashMap는 키를 통해 조회할 때 가지고 있다면 value를 가지고 있지 않다면 null을 반환한다.

 

import java.util.StringTokenizer;
import java.util.HashMap;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashMap<String, Integer> map = new HashMap<>();
        StringTokenizer st;
        StringBuilder sb = new StringBuilder();

        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < N; i++) {
            map.put(st.nextToken(), 0);
        }// 해시맵에 가지고 있는 카드를 넣는다.

        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < M; i++) {
            //정수 M까지의 숫자를 순서대로 대입한다.
            if (map.get(st.nextToken()) != null) {
                //HashMap를 쓴 이유. 
                //HashMap은 값이 있으면 Key에 대한 Value를 반환하고, 없으면 null을 반환한다.
                //즉 값이 null이 아닌 값이니 M까지 숫자 중 카드 N에 있는 수만 반환한다.
               
                sb.append("1 ");
                // StringBuilder에 1을 더함.

            } else {
                sb.append("0 ");
                //아니면 0을 더함
            }
        }

        System.out.print(sb);

        br.close();
    }

}

'java' 카테고리의 다른 글

백준 7785 자바 회사에 있는 사람 java  (0) 2024.01.23
백준 14425 문자열 집합 java 자바  (1) 2024.01.23
백준 18870 좌표압축 자바 java  (0) 2024.01.22
백준 10814 나이순 정렬  (0) 2024.01.22
백준 1181 단어 정렬  (1) 2024.01.22