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

import sys

N = int(sys.stdin.readline())

A = sorted(list(map(int , sys.stdin.readline().split(' '))))

Res = 0



for k in range(N):
    find = A[k]
    i_index = 0
    j_index = N -1
    # if A[i] != A[j]:
    while True:
        if A[i_index] + A[j_index] == find :

            if i_index != k and j_index != k: #자기 자신을 포함하지 않는?
                Res +=1
               
                break
            elif j_index==k:
                j_index -= 1
            elif i_index==k:
                i_index += 1
        elif A[i_index]+ A[j_index] < find: #find 값보다 작을 경우 작은 값의 인덱스 증가 시킨다.
            i_index += 1
        elif A[i_index] + A[j_index] > find: #find 값 보다 클 경우 큰 값의 인덱스 감소 시킨다.
            j_index -= 1
        if i_index>= j_index:
            break
print(Res)

==> 

EX) 5 

0 0 2 2 2 

 

==> 0(i 인덱스 : 0) +2( j 인덱스:3) = 2(k 인덱스 : 2)

==> 0(i 인덱스 : 0) +2(j 인덱스 : 4) = 2(k 인덱스: 3)

==> 0(i 인덱스 :0) + 2(j 인덱스 : 3) = 2(k 인덱스 : 4)

==> 3개 이다.

 

 

==> 0(i인덱스 : 0) + 2(j 인덱스 : 4) = 2(k 인덱스 : 4) 의 경우 자기자신을 포함시키면 안되므로 안된다!

==> 투 포인터 사용법 기억하자!!!!!! ==> i는 start , j는 end , k는 찾을 값

 

==> 작은 값 , 큰 값 비교하자!

728x90
반응형

+ Recent posts