For Programmer

백준 3273번 파이썬 문제풀이(두 수의 합) 본문

코팅테스트/백준 문제 모음

백준 3273번 파이썬 문제풀이(두 수의 합)

유지광이 2022. 2. 14. 20:06
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
Comments