alpyrithm_알파이리즘
[알고리즘][Python] 백준(BOJ) 2776 암기왕_파이썬 본문
2776 암기왕 www.acmicpc.net/problem/2776
문제 풀기 전 공부할 것 : 이분 탐색, 정렬
풀이 1
<내용>
- 수첩1에 있는 숫자를 set으로 입력받는다.(같은 숫자를 여러 번 봐도 하나만 적혀 있으면 된다.)
- list로 받으면 시간 초과가 발생한다.
- 수첩2에 있는 숫자를 for문을 통해 반복하면서 수첩1에 있는 숫자인지 확인한다.
<코드>
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
n = int(input())
nums1 = set(map(int, input().split()))
m = int(input())
nums2 = list(map(int, input().split()))
for num in nums2:
if num in nums1:
print(1)
else:
print(0)
풀이 2
<내용>
- 수첩2에 있는 숫자가 수첩1에 있는 숫자인지 확인하기 위해서 binary_search를 이용한다.
<코드>
import sys
input = sys.stdin.readline
def binary_search(s, e, nums1, num):
while s <= e:
mid = (s+e) // 2
if nums1[mid] == num:
return 1
elif nums1[mid] < num:
s = mid+1
else:
e = mid-1
return 0
t = int(input())
for _ in range(t):
n = int(input())
nums1 = list(map(int, input().split()))
nums1.sort()
m = int(input())
nums2 = list(map(int, input().split()))
for num in nums2:
print(binary_search(0, n-1, nums1, num))
728x90
반응형
'Algorithm > 백준 알고리즘_Python' 카테고리의 다른 글
[알고리즘][Python] 백준(BOJ) 5347 LCM_파이썬 (0) | 2020.10.28 |
---|---|
[알고리즘][Python] 백준(BOJ) 10211 Maximum Subarray_파이썬 (0) | 2020.10.27 |
[알고리즘][Python] 백준(BOJ) 11441 합 구하기_파이썬 (0) | 2020.10.23 |
[알고리즘][Python] 백준(BOJ) 1431 시리얼 번호_파이썬 (0) | 2020.10.22 |
[알고리즘][Python] 백준(BOJ) 13241 최소공배수_파이썬 (0) | 2020.10.21 |
Comments