반응형
문제
https://www.acmicpc.net/problem/3273
코드
import sys
input = sys.stdin.readline
n = int(input())
nums = sorted(list(map(int, input().split())))
x = int(input())
cnt = 0
start = 0
end = n - 1
while start < end:
inter_sum = nums[start] + nums[end]
if inter_sum == x:
cnt += 1
start += 1
elif inter_sum > x:
end -= 1
else:
start += 1
print(cnt)
설명
투 포인터의 개념을 이용해서 문제를 풀이했다.
우선 받은 수를 정렬해서 투 포인터를 사용할 수 있게 해 준다.
그리고 시작 지점과 끝 지점의 인덱스를 지정해 준다.
시작의 경우 0으로 끝 지점의 경우 n-1로 지정했다.
시작 지점이 끝 지점보다 커지기 전까지 반복하며
각 인덱스를 가진 수를 더해서 목푯값과 같은지 확인한다.
만약 목푯값보다 크다면 end를 1 줄여서 더 작은 값을 더할 수 있게 한다.
목표값보다 작다면 start를 1 늘려서 더 큰 값을 더할 수 있게 한다.
만약 목푯값과 일치한다면 카운트를 1 늘려주고 start를 1 늘려서 계산한다.(end를 줄여도 상관없다.)
최종적으로 카운트된 값을 출력한다.
반응형
'개발 연습장 > 백준 문제풀이' 카테고리의 다른 글
[파이썬, Python] 백준 1439: 뒤집기 (0) | 2023.07.06 |
---|---|
[파이썬, Python] 백준 1541: 잃어버린 괄호 (0) | 2023.07.05 |
[파이썬, Python] 백준 2559: 수열 (0) | 2023.07.03 |
[파이썬, Python] 백준 2776: 암기왕 (0) | 2023.06.30 |
[파이썬, Python] 백준 10974: 모든 순열 (0) | 2023.06.29 |