728x90
📌 투 포인터를 활용한 풀이
가장 일반적인 투 포인터 문제이다.
투 포인터는 주로 정렬된 대상을 대상으로 한다. (파이썬 알고리즘 인터뷰 - 박상길 에 의하면)
우선 고유 번호들을 정렬한 뒤 투 포인터로 풀기 위해
- left = 0
- right = len(nums) - 1
로 둔다.
그 다음 left와 right의 합이 원하는 결과(여기서는 m) 보다 작으면 left를 +1
크다면 right을 -1 해주면서 만족하는 값을 찾아 가운데로 조여 나간다.
그러다가 원하는 결과가 나오면 count를 +1 해주고 left와 right을 각각 +1, -1 해준다.(결과를 하나 찾았으므로 한 칸씩 조인다고 생각하면 편하다.)
풀이 코드
import sys
input = sys.stdin.readline
n = int(input())
m = int(input())
nums = list(map(int,input().split()))
nums.sort()
left, right = 0, len(nums) - 1
count = 0
while left < right:
sum_num = nums[left] + nums[right]
if sum_num < m:
left += 1
elif sum_num > m:
right -= 1
else:
count += 1
left += 1
right -= 1
print(count)
'Algorithm' 카테고리의 다른 글
리트코드(LeetCode) 561번 배열 파티션(Array Partition) (0) | 2021.09.27 |
---|---|
리트코드(LeetCode) 238번 자신을 제외한 배열의 곱(Product of Array Except Self) (3) | 2021.09.27 |
리트코드(LeetCode) 15번 세 수의 합(3 Sum) (0) | 2021.09.25 |
백준 알고리즘 파이썬(Python) 14719번 빗물 (0) | 2021.09.25 |
백준 알고리즘 파이썬(Python) 10773번 제로 (0) | 2021.09.17 |