숫자 카드 10815

LJM·2023년 2월 7일
0

백준풀기

목록 보기
75/259

카드를 배열로 받아서 배열에서 이분탐색을 하였다
시간복잡도 nlog(m)

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

import java.io.*;
import java.util.*;

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());
        int[] card = new int[n];
        String[] input = br.readLine().split(" ");
        for(int i = 0; i < n; ++i)
        {
            card[i] = Integer.parseInt(input[i]);
        }

        int m = Integer.parseInt(br.readLine());
        int[] nums = new int[m];
        input = br.readLine().split(" ");
        for(int i = 0; i < m; ++i)
        {
            nums[i] = Integer.parseInt(input[i]);
        }

        Arrays.sort(card);

        int left = 0;
        int right = card.length-1;
        int cand = 0;

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < m; ++i)
        {
            left = 0;
            right = card.length-1;

            boolean find = false;
            while (left <= right)
            {
                cand = (left+right)/2;
                if(nums[i] == card[cand])
                {
                    find = true;
                    break;
                }
                else if(nums[i] < card[cand])
                {
                    right = cand-1;
                }
                else
                {
                    left = cand+1;
                }
            }

            if(find)
                sb.append("1" + " ");
            else
                sb.append("0" + " ");
        }

        System.out.println(sb);
    }
}
profile
게임개발자 백엔드개발자

0개의 댓글