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)

 

 

 

 

 

 

 

복사했습니다!