문제
https://www.acmicpc.net/problem/1940
풀이
n = int(input())
m = int(input())
arr = list(map(int,input().split()))
cnt=0
arr.sort()
left = 0
right = len(arr)-1
while left < right:
if arr[left] + arr[right] == m:
cnt+=1
left+=1
right-=1
elif arr[left] + arr[right] >= m:
right-=1
else:
left+=1
print(cnt)
투포인터를 사용하여 풀어주었다.
정렬을 한뒤 왼쪽, 오른쪽 포인터를 정해주어 옮겨가면서 풀었다.
포인터의 합이 m보다 크면 더 작은 수를 더해야하므로 오른쪽을 -1 해준다.
포인터의 합이 m보다 작으면 더 작은 수를 더해야하므로 왼쪽을 +1 해준다.
같으면 답을 더해준다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #4375 - 1 (0) | 2022.05.15 |
---|---|
[Python] 백준 #3986 - 좋은 단어 (0) | 2022.05.15 |
[Python] 백준 #1213 - 팰린드롬 만들기 (0) | 2022.05.15 |
[Python] 백준 #1629 - 곱셈 (0) | 2022.05.14 |
[Python] 백준 #9375 - 패션왕 신해빈 (0) | 2022.05.14 |