알고리즘/백준(BOJ)

[백준/BOJ/알고리즘/파이썬(python)]#3273_두 수의 합

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

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

정렬/두 포인터 문제로 

역시나 그냥 반복문을 돌리니 시간초과가 떴다 

이분탐색하여 두 포인터로 탐색해서 풀면 된다.

 

반복문 조건을 <=가 아닌 <로 해두어야한다는 점 유의.

 

파이썬 코드

import sys
input = sys.stdin.readline

n = int(input())
seq = []
seq = map(int, input().split())
x = int(input())

seq = sorted(seq)

start = 0
end = n-1
cnt = 0
while start < end:
    if seq[start]+seq[end] == x:
        cnt += 1
    elif seq[start]+seq[end] < x:
        start+=1
        continue
    end-=1


print(cnt)