백준 10815번 숫자 카드

DARTZ·2022년 5월 18일
0

알고리즘

목록 보기
62/135

시간 초과 코드

import sys
sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline

N = int(input())

n_list = list(map(int, input().split()))

M = int(input())

m_list = list(map(int, input().split()))
answer = []

for m in m_list:
    if m in n_list:
        answer.append(1)

    else:
        answer.append(0)

for a in answer:
    print(a, end=" ")

너무 쉬워서 풀면서도 이렇게 푸는게 아니구나 생각을 했다. 역시 시간초과 발생..
어차피 탐색문제니 이분 탐색으로 구하면 될 것 같다.

정답코드

import sys
sys.stdin = open('input.txt', 'rt')
input = sys.stdin.readline

N = int(input())

n_list = list(map(int, input().split()))

M = int(input())

m_list = list(map(int, input().split()))
answer = []

n_list.sort()

for m in m_list:

    start = 0
    end = len(n_list) - 1
    answer = 0

    while start <= end:
        middle = (start + end) // 2

        if n_list[middle] == m:
            answer = 1
            break

        elif n_list[middle] < m:
            start = middle + 1

        else:
            end = middle - 1

    print(answer, end=" ")

리스트가 2개 만들어지는데 첫번째 리스트만 정렬해서 이분 탐색을 해주면 된다.
이분 탐색은 정렬된 배열에서만 사용할 수 있으므로 일단 비교해야할 첫번 째 배열을 정렬해준다.
answer에 0을 초기화 해주고 값이 있을 경우에만 answer에 1을 대입한다. 배열에서 찾아야 하므로 end는 배열 길이의 -1 을 해준다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글