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=' ')