티스토리 뷰

728x90
반응형

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

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 

 

나의 풀이

import sys
n = int(sys.stdin.readline())
arr = sorted(map(int,(input().split())))
x = int(sys.stdin.readline())

end = n-1
count = 0

for start in range(len(arr)):
    while end>start:
        if arr[start]+arr[end]>x:
            end-=1
        elif arr[start]+arr[end]==x:
            count+=1
            break
        else:
            break
print(count)

 

투 포인터가 뭔지 몰라서 검색해봤더니 start와 end의 두 포인터(?)를 사용해 푸는 문제라고 한다.

근데 이 문제에서는 딱히 start를 움직여줄 필요가 없었던 것 같다. (내 생각..ㅋ)

 

우선 arr을 정렬한다. 

초기 start 는 0, end는 n-1로 설정했다.

정렬된 arr의 앞의 값부터 뒤로 순차적으로, 

arr에서, end가 start보다 클 동안, start와 end에 위치하는 각각의 수의 합이 x보다 크면 end를 하나 줄이고, 

두 수의 합이 x이면, count를  1 증가시키고, 1 증가한 start 값에 대해 다시 계산한다. 

만약 두 수의 합이 x보다 작다면 더 이상 값이 없는 것이므로 1 증가한 start 값에 대해 또 다시 구한다.

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함