Problem
https://www.acmicpc.net/problem/1920
Solution
오답 코드 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def binary(a, b):
left , right = 0, y - 1
while left <= right:
middle = (left + right) // 2
if b == a[middle]:
return 1
elif b > a[middle]:
left = middle + 1
else:
right = middle - 1
return 0
x = int(input())
a = list(map(int, input().split()))
a.sort()
y = int(input())
b = list(map(int, input().split()))
for i in range(y):
print(binary(a, b[i]))
위 코드를 제출하면 런타임 에러가 뜬다.
오답 코드 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
def binary(a, b):
left , right = 0, y - 1
while left <= right:
middle = (left + right) // 2
if b == a[middle]:
return 1
elif b > a[middle]:
left = middle + 1
else:
right = middle - 1
return 0
x = int(input())
a = list(map(int, sys.stdin.readline().split()))
a.sort()
y = int(input())
b = list(map(int, sys.stdin.readline().split()))
for i in range(y):
print(binary(a, b[i]))
input() 부분을 sys.stdin.readline()으로 바꿨는데 같은 문제가 발생했다.
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
x = int(input())
a = list(map(int, input().split()))
a.sort()
y = int(input())
b = list(map(int, input().split()))
for i in b:
left = 0
right = x - 1
while(left <= right):
mid = (right+left) // 2
if a[mid] < i:
left = mid + 1
elif a[mid] > i:
right = mid - 1
elif a[mid] == i:
print(1)
break
else:
print(0)
break
if left > right:
print(0)
break
1,2 처럼 함수를 따로 정의하지 않았다.