알고리즘 문제/백준
좋다 #1253
BEstyle
2023. 1. 9. 01:00
문제
N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다.
N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라.
수의 위치가 다르면 값이 같아도 다른 수이다.
입력
첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)
출력
좋은 수의 개수를 첫 번째 줄에 출력한다.
예제 입력 1 복사
10
1 2 3 4 5 6 7 8 9 10
예제 출력 1 복사
8
힌트
3,4,5,6,7,8,9,10은 좋다.
출처
- 데이터를 추가한 사람: BaaaaaaaaaaarkingDog, baggomsoon96, jame0313
- 문제의 오타를 찾은 사람: jh05013
- 빠진 조건을 찾은 사람: tongnamuu
- 문제를 만든 사람: xhark
알고리즘 분류
import sys
n = int(sys.stdin.readline())
nums = sorted(list(map(int, sys.stdin.readline().split())))
count = 0
for i in range(n):
temp = nums[0:i] + nums[i+1:]
target = nums[i]
lp, rp = 0, len(temp) - 1
while lp<rp:
if temp[lp] + temp[rp] == target:
count+=1
break
elif temp[lp] + temp[rp] > target:
rp-=1
elif temp[lp] + temp[rp] < target:
lp+=1
print(count)