사용 언어 - Python3
문제 - 3273번 두 수의 합
투포인터 : 가능성을 지워주는 방법
https://www.acmicpc.net/problem/3273
정답
양쪽 끝에서 비교하면서 만나면 종료
arr[s] + arr[e]
완전탐색 방법) 첫번째 숫자랑 2~n번째 숫자 더해주기 + 두번째 숫자랑 3~n번째 숫자 더해주기....
=> 시간 복잡도 문제 !
투포인터 알고리즘 활용
arr 정렬 후, s = 0 시작지점 / e = n-1 끝지점
arr[s] + arr[e] 가 x라면, cnt += 1
x이상이라면, 마지막 커서를 한 칸 왼쪽으로 이동해준다.
아니라면, 왼쪽 커서를 한 칸 오른쪽으로 이동해준다.n = int(input())
arr = sorted(list(map(int,input().split())))
x = int(input())
s = 0
e = n-1
cnt = 0
while s < e: #만나면 멈춰라
# 정답조건
if arr[s] + arr[e] == x:
cnt += 1
if arr[s] + arr[e] >= x:
e -= 1
else:
s += 1
print(cnt)
레퍼런스
- 깃허브 정답
'Algorithm > 구현' 카테고리의 다른 글
[백준] 16472번 고냥이 (투포인터 문제) (0) | 2023.11.03 |
---|---|
[백준] 22988번 재활용 캠페인 (투포인터 문제) (1) | 2023.11.03 |
[백준] 3020번 개똥벌레 (1) | 2023.10.24 |
[백준] 11600번 구간 합 구하기 5 (0) | 2023.10.24 |
[백준] 2304번 창고 다각형 (1) | 2023.10.23 |
댓글