For Programmer
백준 3273번 파이썬 문제풀이(두 수의 합) 본문
728x90
N의 값이 1000000 이라 이중 반복문은 돌지 못한다. 즉, 한번의 반복안에 값을 찾아야하는데 이는 투포인터로 풀 수 있다. 투포인터는 크게 두 종류
# 1. 특정 조건을 만족하는 연속 부분 수열을 찾는다.
# s = 0, e = 0 출발
# 반복조건: e < n
# 같이 뒤로 간다.
# 2. 특정 조건을 만족하는 두 개의 수를 찾는다.
# s = 0, e = n - 1 출발
# 반복조건: s < e
# 서로에게 다가간다.
로 나눌 수 있다. 위 문제는 2번째 탬플릿을 적용하면 된다.
n = int(input())
array = list(map(int, input().split()))
x = int(input())
array.sort() #정렬해준다!!.
s = 0 # 시작 포인터
e = n - 1 # 끝 포인터
count = 0
while s < e: # 두 포인터가 엇갈리지 않을 때 까지
# 만약 합이 똑같다면
if array[s] + array[e] == x:
count += 1 # 횟수 +1
s += 1 # s 포인터를 한칸 앞으로 이동
elif array[s] + array[e] > x: # 만약 크다면
e -= 1 # 끝 포인터를 한칸 앞으로 땡긴다.
else: # 만약 작다면
s += 1 # 시작 포인터를 한칸 앞으로 땡긴다.
print(count)
728x90
'코팅테스트 > 백준 문제 모음' 카테고리의 다른 글
백준 2467번 파이썬 문제풀이(용액) (0) | 2022.02.14 |
---|---|
백준 22988번 파이썬 문제풀이(재활용 캠페인) (0) | 2022.02.14 |
백준 6485번 파이썬 문제풀이(삼성시의 버스 노선) (0) | 2022.02.14 |
백준 2003번 파이썬 문제풀이(수들의 합 2) (0) | 2022.02.13 |
SWEA 4615 파이썬 문제풀이(재미있는 오셀로 게임) (0) | 2022.02.12 |
Comments