백준 10815

justhaza.log·2024년 2월 29일

알고리즘: BOJ

목록 보기
40/125

m개의 정수 각각에 대해,
상근이가 갖고 있는 값이면 1, 그렇지 않다면 0을 출력하는 문제이다.


이진 탐색이 가장 먼저 생각이 났고,
상근이 카드 목록을 정렬한 뒤 따로 이진 탐색 함수를 구현해서 풀었다.


코드(정답)는 다음과 같다.

# 10815

import sys

def search(num):
    left = 0
    right = len(user_cards) - 1

    while left <= right:
        mid = (left + right) // 2

        if num < user_cards[mid]:
            right = mid - 1
        elif num > user_cards[mid]:
            left = mid + 1
        else:
            return True
        

n = int(sys.stdin.readline())
user_cards = list(map(int, sys.stdin.readline().split()))
user_cards.sort()

m = int(sys.stdin.readline())
check_cards = list(map(int, sys.stdin.readline().split()))

for i in range(m):
    if search(check_cards[i]):
        print(1, end=' ')
    else:
        print(0, end=' ')

다른 분들의 풀이를 참고하다..
딕셔너리로도 풀 수 있음을 알게 되었다.


아래의 코드에서 'if check_card in user_dict:'는..

만약 check_card라는 정수 값이,
user_dict라는 딕셔너리의 키 값으로 존재하면 1을 출력하는 코드이다.


코드(정답)는 다음과 같다.

import sys

n = int(sys.stdin.readline())
user_cards = list(map(int, sys.stdin.readline().split()))

m = int(sys.stdin.readline())
check_cards = list(map(int, sys.stdin.readline().split()))

user_dict = {}
for user_card in user_cards:
    user_dict[user_card] = 1

for check_card in check_cards:
    if check_card in user_dict:
        print(1, end=' ')
    else:
        print(0, end=' ')
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글