본문 바로가기
알고리즘/[python] 백준 BOJ

[python] 백준 1253 좋다

by Alan_Kim 2023. 2. 18.
728x90
반응형

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

 

1253번: 좋다

첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수)

www.acmicpc.net

 

문제 해결

  • 리스트 안의 서로 다른 두 수의 합이 리스트 안의 다른 수가 되는 경우의 수를 구하는 문제이다.
  • 리스트 안의 서로 다른 두 수의 합을 비교하는 것이므로 리스트를 올림차순으로 정렬하고 투포인터 이용하는 것이 좋아 보인다.
  • 두 수의 합이 리스트 안에 있어도 3 + 0 = 3 등 다른 수가 되지 않으면 그 경우는 경우의 수로 계산하지 않는다.

CODE

import sys
input = sys.stdin.readline

n = int(input())
A = list(map(int, input().split()))
A.sort()
ans = 0
for i in range(n):
    start = 0
    end = n-1
    while start < end:
        if A[start] + A[end] == A[i]:
            if start != i and end !=i:
                ans +=1
                break
            elif start == i:
                start +=1
            elif end == i:
                end -= 1
        elif A[start] + A[end] > A[i]:
            end -= 1
        else:
            start +=1
print(ans)
728x90
반응형

댓글