최대 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 문제풀이


댓글남기기