-
[백준 3273] 두 수의 합 (Python)Algorithm & Problem Solving/투 포인터(Two Pointer) 2020. 12. 26. 23:19
문제풀이
N, arr, X : 입력값
투 포인터(left, right)를 이용하여 해결할 수 있다.
1. 배열(arr)을 입력받고 정렬을 해준다.
- 정렬을 하지 않으면 투 포인터를 정상적으로 사용할 수 없다.
2. left, right 를 이용하여 arr[left]와 arr[right]를 더해준다. (이 값을 tmp 변수에 저장)
- tmp가 X보다 작을 경우는 두 값의 합을 늘려줘야 하므로 left를 1 증가시킨다.
- tmp가 X일 경우, 쌍의 개수(ans)를 1 증가한다.
- tmp가 X보다 클 경우, right를 1 감소시키면서 tmp를 X와 인접할 수 있도록 tmp 값을 줄여준다.
3. 결과(ans)를 출력한다.
코드
import sys if __name__ == '__main__': N = int(input()) arr = list(map(int, sys.stdin.readline().split())) X = int(input()) arr.sort() left, right = 0, N - 1 ans = 0 while left < right: tmp = arr[left] + arr[right] if tmp == X: ans += 1 if tmp < X: left += 1 continue right -= 1 print(ans)
결과
문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!
'Algorithm & Problem Solving > 투 포인터(Two Pointer)' 카테고리의 다른 글
[백준 1484] 다이어트 (Python) (0) 2020.12.29 [백준 14746] Closest Pair (Python) (0) 2020.12.29 [백준 7795] 먹을 것인가 먹힐 것인가 (Python) (0) 2020.12.27 [백준 2018] 수들의 합 5 (Python) (0) 2020.12.26 [백준 2230] 수 고르기 (Python) (0) 2020.12.26