728x90
https://www.acmicpc.net/problem/3273
문제
n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는 (ai, aj)쌍의 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 수열의 크기 n이 주어진다. 다음 줄에는 수열에 포함되는 수가 주어진다. 셋째 줄에는 x가 주어진다. (1 ≤ n ≤ 100000, 1 ≤ x ≤ 2000000)
출력
문제의 조건을 만족하는 쌍의 개수를 출력한다.
풀이
사실 처음에는 투 포인터로 접근할 생각을 하지 못했다.
n = int(input())
a = list(map(int, input().split()))
x = int(input())
answer=0
a.sort()
for i in range(n):
for j in range(i+1,n):
if a[i] + a[j] == x:
answer+=1
if a[i] + a[j] > x:
break
print(answer)
다음과 같이 코드를 작성해서 제출을 시도했지만 시간 초과가 나서 Pypy3로 겨우 통과했다.
하지만 알고리즘 분류에서 정렬과 두 포인터를 보고 다른 풀이들을 참고해서 코드를 다시 작성해봤다.
+ n이 최대 100000까지라서 sys.stdin.readline을 추가했다.
답안 코드
import sys
input = sys.stdin.readline
n = int(input())
a = list(map(int, input().split()))
x = int(input())
a.sort()
answer=0
start = 0
end = n-1
while start < end:
s = a[start]+a[end]
if s == x:
answer+=1
start+=1
elif s > x:
end-=1
else:
start+=1
print(answer)
728x90
반응형
'Algorithm' 카테고리의 다른 글
[백준] 14888번: 연산자 끼워넣기- 파이썬 (0) | 2022.02.10 |
---|---|
[백준] 14500번: 테트로미노 - 파이썬 (0) | 2022.02.07 |
[백준] 17837번: 새로운 게임 2 - 파이썬 (0) | 2022.01.22 |
[백준] 16235번: 나무 재테크- 파이썬 (0) | 2022.01.22 |
[백준] 17780번: 새로운 게임 - 파이썬 (0) | 2022.01.20 |