3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
코드
n = int(input())
a = sorted(list(map(int, input().split())))
x = int(input())
ans = 0
for i in range(n):
s, e = i+1, n-1
while s <= e:
mid = (s+e)//2
if a[i]+a[mid] == x:
ans += 1
break
elif a[i]+a[mid] < x:
s = mid+1
else:
e = mid-1
print(ans)
$a_i$와 더해서 $x$가 되는 특정 수 $a_j$를 찾는 것이기 때문에 배열 $a$를 오름차순 정렬해놓고 이분탐색으로 $a_j$를 찾았다.
'문제풀이 > 이분탐색' 카테고리의 다른 글
[Python/파이썬] 백준 1114번 통나무 자르기 (1) | 2024.04.19 |
---|---|
[Python/파이썬] 백준 2417번 정수 제곱근 (0) | 2024.04.01 |
[Python/파이썬] 백준 14575번 뒤풀이 (0) | 2024.02.17 |
[Python/파이썬] 백준 1166번 선물 (0) | 2024.02.15 |
[Python/파이썬] 백준 17124번 두 개의 배열 (0) | 2024.01.27 |
3273번: 두 수의 합
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는
www.acmicpc.net
코드
n = int(input()) a = sorted(list(map(int, input().split()))) x = int(input()) ans = 0 for i in range(n): s, e = i+1, n-1 while s <= e: mid = (s+e)//2 if a[i]+a[mid] == x: ans += 1 break elif a[i]+a[mid] < x: s = mid+1 else: e = mid-1 print(ans)
$a_i$와 더해서 $x$가 되는 특정 수 $a_j$를 찾는 것이기 때문에 배열 $a$를 오름차순 정렬해놓고 이분탐색으로 $a_j$를 찾았다.
'문제풀이 > 이분탐색' 카테고리의 다른 글
[Python/파이썬] 백준 1114번 통나무 자르기 (1) | 2024.04.19 |
---|---|
[Python/파이썬] 백준 2417번 정수 제곱근 (0) | 2024.04.01 |
[Python/파이썬] 백준 14575번 뒤풀이 (0) | 2024.02.17 |
[Python/파이썬] 백준 1166번 선물 (0) | 2024.02.15 |
[Python/파이썬] 백준 17124번 두 개의 배열 (0) | 2024.01.27 |