Home [Python] 백준 1920번 : 수 찾기
Post
Cancel

[Python] 백준 1920번 : 수 찾기

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 처럼 함수를 따로 정의하지 않았다.

This post is licensed under CC BY 4.0 by the author.

[Python] 백준 2750번 : 수 정렬하기

[Python] 백준 10430번 : 나머지