[BaekJoon] #10815 숫자카드

현굥·2024년 9월 1일

BaekJoon

목록 보기
19/53

문제이해

이 문제는 상근이가 가진 카드에 적힌 적힌 수가, 그 다음 입력으로 입력받은 카드의 숫자를 포함하는지 아닌지 판단하여 포함 유무에 따라 1 혹은 0으로 출력해내는 문제입니다.

입력

총 네번 입력을 받습니다.
첫째줄에는 상근이가 가지고 있는 숫자카드의 갯수, 두번째 줄에는 상근이의 카드에 적힌 숫자, 세번째 줄에는 비교할 카드의 갯수, 네번째줄에는 해당 갯수만큼의 비교할 정수가 입력으로 들어옵니다.

출력

첫째 줄에 입력으로 주어진 M개의 수에 대해서, 각 수가 적힌 숫자 카드를 상근이가 가지고 있으면 1을, 아니면 0을 공백으로 구분해 출력합니다.

문제접근

입력처리

  • 입력을 위해 BufferedReader를 사용하였습니다.

자료구조 선택

  • 이 문제는 상근이가 숫자가 적힌 카드를 가지고 있는지에 대한 여부만 확인하면 되기 떄문에, 카드가 들어온 순서나 숫자의 중복은 신경쓰지 않아도 됩니다. 따라서, 중복을 허용하지 않고 빠른 검색이 가능한 HashSet을 이용하였습니다.

문자열 분리

  • StringTokenizer을 이용하여 입력된 숫자카드 문자열을 공백 기준으로 분리하였습니다. 그리고, 분리된 숫자들을 HashSet에 추가해주었습니다.

존재여부 확인

  • 이후 HashSet의 contains메소드를 이용하여, 입력으로 들어온 숫자를 set안의 숫자들과 비교해주었습니다.

결과 출력

  • 결과값 출력을 위해 StringBuilder를 선언해 사용하였습니다.

code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
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());
        Set<String> set = new HashSet<>();
        StringBuilder sb = new StringBuilder();

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            set.add(st.nextToken());
        }

        int M = Integer.parseInt(br.readLine());
        StringTokenizer ST = new StringTokenizer(br.readLine());
        for (int j = 0; j < M; j++) {

            if (set.contains(ST.nextToken())) {
                sb.append('1').append(" ");
            } else {
                sb.append('0').append(" ");
            }
        }
        System.out.println(sb);

    }

}

결과창

0개의 댓글