Java/백준알고리즘

[Java] 백준알고리즘 #10815 숫자 카드

Sehyeok20 2023. 10. 25. 19:20
반응형

숫자카드를 가지고 있다면 1, 아니라면 0을 출력하는 문제.

HashSet 기능을 이용한다면 간단히 해결할 수 있다.

2023.10.17 - [Java/개념정리] - [Java] HashSet 에 대해 알아보자

 

[Java] HashSet 에 대해 알아보자

Set Interface 기본적으로 Set혹은 Set계열을 구현하는 클래스들은 다음과 같은 공통점이 있다. 중복되는 요소(원소)를 허용하지 않는다. 저장 순서를 유지하지 않는다. (LinkedHashSet 만 예외) HashSet HashS

sehyeok.tistory.com

첫 입력에서 add()메소드로 해쉬에 추가한 후, 두번째 입력에서 contains() 메소드를 이용해 해당 숫자를 포함하는지 아닌지를 판단하여 출력하면 된다.

 

두 가지 방식으로 해결해보았다.

먼저 Scanner를 이용한 방법

 

// 해설참조 : sehyeok.tistory.com 

import java.io.IOException;
import java.util.HashSet;
import java.util.Scanner;

public class Main {
    public static void main(String args[]) throws IOException {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        HashSet<Integer> card = new HashSet<Integer>();     // Hash 생성
        for (int i = 0; i < n; i++) {
            card.add(sc.nextInt());     // Hash에 추가
        }

        int m = sc.nextInt();

        for (int i = 0; i < m; i++) {
            if (card.contains(sc.nextInt())) {  // 해당 숫자가 Hash 에 포함되어 있다면
                System.out.print(1 + " ");
            } else {
                System.out.print(0 + " ");
            }
        }
        sc.close();
    }
}

 

두 번째는 BufferedReader를 이용한 방법.

이 때는 StringTokenizer 클래스를 이용해 입력 받은 문자열을 공백을 기준으로 분리해준다.

2023.10.25 - [Java/개념정리] - [Java] 문자열 분리 (split, StringTokenizer 사용법)

 

// 해설참조 : sehyeok.tistory.com 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
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> card = new HashSet<Integer>();     // Hash 생성
        StringTokenizer st = new StringTokenizer(br.readLine());    // StringTokenizer생성
        for (int i = 0; i < n; i++) {
            card.add(Integer.parseInt(st.nextToken()));     // 띄어쓰기 기준으로 문자열 분리, Hash에 추가
        }

        int m = Integer.parseInt(br.readLine());

        StringTokenizer st2 = new StringTokenizer(br.readLine());   // 새 StringTokenizer 생성
        for (int i = 0; i < m; i++) {
            if (card.contains(Integer.parseInt(st2.nextToken()))) { // 분리한 문자열이 Hash에 포함되어 있다면
                System.out.print(1 + " ");
            } else {
                System.out.print(0 + " ");
            }
        }
    }
}

 

두 방법의 성능 차이는 다음과 같다.

 

위 : Scanner / 아래 : BufferedReader

 

반응형