백준_수찾기

임정민·2024년 2월 28일
0

알고리즘 문제풀이

목록 보기
165/173
post-thumbnail

백준 실버4 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

https://www.acmicpc.net/problem/1920

[나의 풀이]

⌛ 10분


def binary_search(A,x):

    start = 0
    end = len(A)-1

    while start<=end:
        print("----------")
        mid = (start+end)//2

        if A[mid]==x:
            print(1)
            return
        elif A[mid]>x:
            end = mid-1
        else:
            start = mid+1
    print(0)

N = int(input())
A = list(map(int,input().split()))
M = int(input())
B = list(map(int,input().split()))
A.sort()

for b in B:
    binary_search(A,b)

입력된 수의 배열(N) 중 찾고자 하는 숫자(M)가 있는지 판별하는 문제입니다.
입력된 배열을 정렬하고 이분탐색을 구현하여 어렵지 않게 해결할 수 있었습니다.

[다른 사람의 풀이1]


from sys import stdin, stdout
n = stdin.readline()
N = sorted(map(int,stdin.readline().split()))
m = stdin.readline()
M = map(int, stdin.readline().split())

def binary(l, N, start, end):
    if start > end:
        return 0
    m = (start+end)//2
    if l == N[m]:
        return 1
    elif l < N[m]:
        return binary(l, N, start, m-1)
    else:
        return binary(l, N, m+1, end)

for l in M:
    start = 0
    end = len(N)-1
    print(binary(l,N,start,end))

'나의 풀이'와 같이 이분탐색을 활용하되 재귀함수로 구현한 모습입니다.

[다른 사람의 풀이2]


N = int(input())
nArray = set(map(int, input().split()))
M = int(input())
mArray = list(map(int, input().split()))

for i in range(M):
    if mArray[i] in nArray:
        print("1")
    else:
        print("0")

실버5 단계의 문제이기 때문에 시간복잡도가 널널하여 단순 loop문을 활용하여 풀어낼 수도 있었습니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글