문제 링크 : www.acmicpc.net/problem/1920
1920번: 수 찾기
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들
www.acmicpc.net
단순 탐색 문제로, 처음에는 이진탐색을 이용해서 풀었다.
import sys
def binary_search(arr, target):
low = 0
high = len(arr) - 1
while low <= high:
mid = (high+low)//2
if arr[mid] < target:
low = mid + 1
elif arr[mid] == target:
return mid
elif arr[mid] > target:
high = mid - 1
return -1
N = int(sys.stdin.readline())
arr = list(map(int, sys.stdin.readline().rstrip().split(' ')))
arr.sort()
M = int(sys.stdin.readline())
targets = list(map(int, sys.stdin.readline().rstrip().split(' ')))
for target in targets:
if binary_search(arr, target) == -1:
print('0')
else:
print('1')
제출 후에 다른 분들의 코드를 살펴보니 수행시간이 유독 짧은 코드들이 있었는데, 이진 탐색이 아니라 set을 이용한 풀이가 있었다. set을 이용한 코드는 다음과 같다.
import sys
N = int(sys.stdin.readline())
arr = set(sys.stdin.readline().split())
M = int(sys.stdin.readline())
targets = sys.stdin.readline().split()
for target in targets:
if target in arr:
print('1')
else:
print('0')
두 번째 코드가 첫 번째 코드보다 약 4배정도 빨랐다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1932번 - 정수 삼각형 (0) | 2021.01.02 |
---|---|
[백준] 9461번 - 파도반 수열 (0) | 2021.01.02 |
[백준] 1541번 - 잃어버린 괄호 (0) | 2020.12.29 |
[백준] 1931번 - 회의실배정 (0) | 2020.12.28 |
[백준] 10828번 - 스택 (0) | 2020.12.23 |