https://www.acmicpc.net/problem/1822
이문제는 이분탐색으로 분류된 문제였다.
그래서 이분탐색으로 풀어봤다.
na, nb = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
b.sort()
answer = 0
for target in a:
temp = False
start = 0
end = len(b)-1
while start <= end:
mid = (start + end) // 2
if target == b[mid]:
temp = True
break
elif target < b[mid]:
end -= 1
else:
start += 1
if not temp:
answer += 1
print(answer)
우선 a에 속하면서 b에 속하지 않은 숫자를 출력하지 않은 것도 문제지만 애초에 시간초과가 발생했다.
때문에 어쩔 수 없이 딕셔너리로 풀어봤다.
na, nb = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
dic = {}
for i in b:
dic[i] = 1
answer = 0
arr = []
for i in a:
if i not in dic:
answer += 1
arr.append(i)
print(answer)
arr.sort()
for i in arr:
print(i, end=' ')
지금 이 글을 작성하면서 다시 봤는데 이 문제의 알고리즘은
자료구조, 정렬, 해시맵, 트리맵으로 어디에도 이분탐색은 없다... 대체 뭘 본거지...
'알고리즘' 카테고리의 다른 글
파이썬) 2 X N 타일링 - BOJ (0) | 2023.12.07 |
---|---|
파이썬) 듣보잡 (0) | 2023.12.06 |
파이썬) 상자넣기 - BOJ (0) | 2023.12.05 |
파이썬) 파도반 수열 - BOJ (0) | 2023.12.04 |
파이썬) 계단 오르기 - BOJ (0) | 2023.12.04 |