[백준] 10815번 : 숫자 카드 (JAVA)

2026. 2. 17. 19:49·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

https://www.acmicpc.net/problem/10815


📌 문제 개요

N개의 숫자 카드가 주어진다.
M개의 숫자가 주어질 때, 각 숫자가 카드에 존재하는지 확인하여 존재하면 1, 없으면 0을 출력하는 문제


📌 접근 방법

이 문제는 특정 숫자의 존재 여부를 빠르게 확인해야 한다.

처음에는 정렬 후 이분 탐색으로 접근할 수 있지만,
더 효율적인 방법은 HashSet을 사용

HashSet은 평균적으로 O(1) 시간에 특정 값의 존재 여부를 확인할 수 있다.


📌 핵심 아이디어

  1. 카드 숫자들을 HashSet에 저장한다.
  2. 찾고 싶은 숫자에 대해 set.contains()로 존재 여부를 검사
  3. 출력은 StringBuilder에 누적 후 한 번에 출력

시간 복잡도는 다음과 같다.

  • 카드 저장: O(N)
  • 숫자 확인: O(M)
  • 전체: O(N + M)

📌 전체 코드

package no_10815;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
/*
문제-10815(실버5): 숫자 카드
- N개의 숫자 카드가 주어진다.
- M개의 숫자가 주어질 때, 각 숫자가 카드에 존재하는지 확인하여
  존재하면 1, 없으면 0을 출력하는 문제

주요 메서드

- `HashSet<Integer> set` : 카드 번호 저장
- `set.contains(target)` : 특정 숫자 존재 여부 확인
- `StringBuilder` : 출력 문자열 누적

주요 알고리즘

- 입력 받은 카드들을 `HashSet`에 저장
- M개의 숫자에 대해 `contains()`로 존재 여부 검사
- 평균 시간 복잡도 `O(1)` 조회
- 전체 시간 복잡도: `O(N + M)`
- 공간 복잡도: `O(N)`
*/
public class No10815 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        Set<Integer> set = new HashSet<>();

        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i < N; i++){
            set.add(Integer.parseInt(st.nextToken()));
        }

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

        StringTokenizer st2 = new StringTokenizer(br.readLine());
        StringBuilder sb = new StringBuilder();

        for(int i = 0; i < M; i++){
            int target = Integer.parseInt(st2.nextToken());

            if(set.contains(target)){
                sb.append("1 ");
            } else {
                sb.append("0 ");
            }
        }

        System.out.println(sb);
    }
}

📌 정리

  • 이 문제는 탐색 문제이다.
  • 정렬 + 이분 탐색으로도 해결 가능
  • 하지만 HashSet을 사용하면 더 간단하고 빠르게 해결할 수 있다.
  • 대량 출력이 있는 경우 StringBuilder 사용은 필수 습관
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

[백준] 17478번 : 재귀함수가 뭔가요? (JAVA)  (0) 2026.02.19
[백준] 1476번 : 날짜 계산 (JAVA)  (0) 2026.02.19
[백준] 25206번 : 너의 평점은 (JAVA)  (0) 2026.02.16
[백준] 1789번 : 수들의 합 (JAVA)  (0) 2026.02.15
[백준] 1085번 : 직사각형에서 탈출 (JAVA)  (0) 2026.02.14
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • [백준] 17478번 : 재귀함수가 뭔가요? (JAVA)
  • [백준] 1476번 : 날짜 계산 (JAVA)
  • [백준] 25206번 : 너의 평점은 (JAVA)
  • [백준] 1789번 : 수들의 합 (JAVA)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN N
      • 코테(Solved.ac + Programmers) N
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    springboot
    level1
    브루트포스
    프로그래머스
    실기
    구현
    문자열
    정보처리기사
    정렬
    수학
    코딩테스트
    정처기
    자료구조
    level0
    solved.ac
    자바
    시뮬레이션
    java
    배열
    알고리즘
    정처기실기
    완전탐색
    dp
    Level2
    기출문제
    정처기오답노트
    백엔드개발자
    정보처리기사 실기 기출문제
    피보나치
    백준
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
[백준] 10815번 : 숫자 카드 (JAVA)
상단으로

티스토리툴바