https://www.acmicpc.net/problem/10815
1. 내가 작성한 코드
import sys
n = int(sys.stdin.readline())
s_number = sorted(list(map(int, sys.stdin.readline().split())))
m = int(sys.stdin.readline())
total_number = list(map(int, sys.stdin.readline().split()))
arr = []
for i in total_number:
start = 0
end = n-1
while start <= end:
mid = (start+end)//2
result = 0
if s_number[mid] == i:
result = 1
break
elif s_number[mid] > i:
end = mid-1
elif s_number[mid] < i:
start = mid+1
if result == 1:
arr.append(1)
else:
arr.append(0)
for i in arr:
print(i, end=' ')
이진탐색을 이용하는 기본적인 문제이다.
물론 난 아직 이직탐색을 잘 활용하지 못해서 시간이 좀 걸렸다 ~ㅎㅎ,,,
내 코드는 arr와 for문을 이용해서 1,0을 출력해 줘서 그런지
아래의 코드가 시간과 메모리를 좀 더 아낄 수 있다.
2. 추가 코드
import sys
n = int(sys.stdin.readline())
s_number = sorted(list(map(int, sys.stdin.readline().split())))
m = int(sys.stdin.readline())
total_number = list(map(int, sys.stdin.readline().split()))
arr = []
for i in total_number:
start = 0
end = n-1
while start <= end:
mid = (start+end)//2
result = False
if s_number[mid] == i:
result = True
break
elif s_number[mid] > i:
end = mid-1
elif s_number[mid] < i:
start = mid+1
print(1 if result else 0, end = ' ')
boolean 자료형을 활용하면 좀 더 효율적인 코딩을 할 수 있겠다고 느끼는 요즘,,
'🔅코딩테스트 공부🔅 > ❗백준' 카테고리의 다른 글
[백준] 2108번 통계학(with python) (0) | 2023.02.02 |
---|---|
[백준] 11651번 좌표 정렬하기 2(with python) (0) | 2023.02.02 |
[백준] 1181번 단어 정렬(with python) (0) | 2023.02.01 |
[백준] 11650번 좌표 정렬하기(with python) (0) | 2023.01.31 |
[백준] 1026번 보물(with python) (0) | 2023.01.31 |
댓글