본문 바로가기

백준 문제 풀이/파이썬

백준 1920 파이썬 문제 풀이 - 수 찾기

https://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

 

이 문제는 주어진 수열에서 특정 수를 찾는 문제로, 이진 탐색을 활용하여 효율적으로 해결할 수 있습니다.

파이썬으로 풀어보았습니다.

풀이 과정:

  1. 우선, 입력으로 주어지는 수열을 정렬합니다. 이진 탐색을 사용하기 위해서는 정렬된 배열이 필요하기 때문입니다.
  2. 이진 탐색 함수를 구현합니다. 이 함수는 주어진 배열에서 특정 수를 찾는 역할을 합니다. 이진 탐색은 배열의 중간 값을 확인하고, 찾고자 하는 수와의 대소 관계를 비교하여 범위를 좁혀가는 방식으로 동작합니다.
  3. 입력으로 주어진 찾아야 할 수들에 대해, 이진 탐색 함수를 호출하여 결과를 출력합니다. 각각의 수에 대해서 이진 탐색을 수행하고, 결과로서 1 또는 0을 출력합니다. 1은 수를 찾았음을 의미하고, 0은 수를 찾지 못했음을 의미합니다.

아래는 위의 풀이 과정을 반영한 코드 예시입니다.

def binary_search(arr, target):
    left, right = 0, len(arr) - 1

    while left <= right:
        mid = (left + right) // 2

        if arr[mid] == target:
            return 1
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1

    return 0

# 입력 받기
N = int(input())
arr = list(map(int, input().split()))
M = int(input())
targets = list(map(int, input().split()))

# 배열을 정렬
arr.sort()

# 각각의 수에 대해 이진 탐색 수행하여 결과 출력
for target in targets:
    result = binary_search(arr, target)
    print(result)

위의 코드를 실행하면, 주어진 수열에서 찾아야 할 수들에 대한 결과가 출력됩니다. 각각의 수에 대해 이진 탐색을 수행하여 결과를 얻을 수 있습니다.
더 자세한 설명이 필요하거나 다른 도움이 필요하시면 언제든지 댓글을 남겨주세요. 감사합니다!