최대 1 분 소요

1. 문제

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

  • 이분탐색 문제
// 문제
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 좋다.


2. 핵심 아이디어


3. Python 문제풀이

import sys
input = sys.stdin.readline

read = lambda: input().rstrip()
n = int(input())

arr = list(map(int, input().split()))
arr.sort()
result = 0

for i in range(n) :
  tmp = arr[:i] + arr[i+1:]
  start, end = 0, len(tmp) - 1

  while start < end :
    total = tmp[start] + tmp[end]
    if total == arr[i] :
      result += 1
      break
    elif total < arr[i] :
      start += 1
    else :
      end -= 1

print(result)


4. Java 문제풀이


댓글남기기