import sys
# sys.stdin.readline()
from collections import deque
sys.setrecursionlimit(100000000)
import heapq
import copy
import itertools
from itertools import combinations
from itertools import permutations
INF = 1e9
def findelem(arr,targetElement):
start = 0
end = len(arr)
while start<=end:
mid = (start + end) // 2
if arr[mid] == targetElement:
return "yes"
elif arr[mid] > targetElement:
end = mid - 1
else:
start = mid + 1
return "no"
N = int(input())
arr = list(map(int,sys.stdin.readline().split()))
M = int(input())
target = list(map(int,sys.stdin.readline().split()))
arr.sort()
for i in target:
print(findelem(arr,i),end=' ')
이렇게 푸는것이 정석이지만
계수정렬로 푸는게 훨씬 간단하다고 생각했다.
문제에서 N의 크기가 100만 이상으론 가지 않는다고 명시해줬으므로
2번째 배열의 크기를 100만 + 1으로 만들어주고,
부품 번호의 인덱스를 1로 만들어준다.
예를 들어 문제에선 2 3 7 8 9 이므로
arr[2],arr[3],arr[7],arr[8],arr[9]의 값을 1로 초기화(나머진 모두 초기에 0으로 초기화)
이후 target 배열의 반복문에서
for i in target:
if i in arr:
print("yes")
이런 식으로 하는게 코드가 가장 간결할 것이다.
'알고리즘 문제 풀이 > 이코테' 카테고리의 다른 글
[이코테] CH07 이진 탐색 실전문제 27번 정렬된 배열에서 특정 수의 개수 구하기 (1) | 2024.01.07 |
---|---|
[이코테] CH07 이진 탐색 실전문제 3번 떡볶이 떡 만들기 (0) | 2024.01.05 |
[이코테] CH05 DFS/BFS 실전문제 19번 연산자 끼워 넣기 (1) | 2023.12.03 |
[이코테] CH05 DFS/BFS 실전문제 18번 괄호 변환 (2) | 2023.12.02 |
[이코테] CH05 DFS/BFS 실전문제 17번 경쟁적 전염 (0) | 2023.12.01 |