diff --git a/workbook_8708/gold/1253-g4.py b/workbook_8708/gold/1253-g4.py new file mode 100644 index 0000000..ff8f748 --- /dev/null +++ b/workbook_8708/gold/1253-g4.py @@ -0,0 +1,54 @@ +# 좋다 + +import sys + +input = sys.stdin.readline + +def two_pointer(l, r, nums, i, target): + while l < r: + if l == i: + l += 1 + continue + if r == i: + r -= 1 + continue + + now = nums[l] + nums[r] + if now == target: + return True + if now < target: + l += 1 + else: + r -= 1 + return False + +def solution(): + n = int(input().rstrip()) + + nums = list(map(int, input().rstrip().split())) + + sorted_nums = sorted(nums) + count = 0 + + for i in range(n): + if two_pointer(0, n-1, sorted_nums, i, sorted_nums[i]): + count += 1 + + print(count) + + return + + +solution() + +""" +걸린 시간: 40분 + +시간 복잡도: 모든 범위에 대해 투 포인터는 O(n)이고, 모든 숫자가 타겟이 되기 때문에 O(n^2)이다. + +해설: 모든 것을 확인해야 하는 여부를 생각해봤을 때, 어떤 수가 있을지 모르기 때문에 다 봐야한다. +그럼 두 개의 조합을 모두 봐야 하나?를 생각했을 때 정렬해서 투 포인터를 쓰면 다 보지 않아도 된다. +이제 범위를 본인보다 작은 것들에서 투포인터를 진행하며 구현을 했다. +근데 틀렸다. 왜 why? 수가 자연수만 있는 것이 아니었다. 당연히 자연수 범위라고 생각했는데 알고보니 절대값으로 범위가 표현되어 있었다. +음수와 양수를 합치면 값이 줄어들기 때문에 타겟 숫자의 오른쪽도 후보가 될 수 있어서 모든 범위에 대해 계속 투포인터를 진행해야 한다. +""" \ No newline at end of file