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 또는 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)
위의 코드를 실행하면, 주어진 수열에서 찾아야 할 수들에 대한 결과가 출력됩니다. 각각의 수에 대해 이진 탐색을 수행하여 결과를 얻을 수 있습니다.
더 자세한 설명이 필요하거나 다른 도움이 필요하시면 언제든지 댓글을 남겨주세요. 감사합니다!
'백준 문제 풀이 > 파이썬' 카테고리의 다른 글
| 백준 10869번 "사칙연산" --- 파이썬 (0) | 2024.09.21 |
|---|---|
| 백준 10998번 "A×B" --- 파이썬 (0) | 2024.09.20 |
| 백준 1001번 "A-B" --- 파이썬 (0) | 2024.09.19 |
| 백준 2557번 "Hello World" --- 파이썬 (1) | 2024.09.17 |
| 백준 9095번 "1, 2, 3 더하기" --- 파이썬 (4) | 2024.09.17 |