본문 바로가기
알고리즘/BOJ

[BOJ] 3273번 두 수의 합 / 사용언어 : 파이썬(python)

by 바른 호랑이 2022. 2. 23.
728x90
반응형

※ 문제링크

 

채점 현황

 

www.acmicpc.net

해당 문제는 투 포인터를 활용하여 해결할 수 있는 문제였다. 사실 반복문만으로도 결과는 출력할 수 있지만 당연하게도 시간초과가 되었다. 핵심은 정렬 후 양쪽 끝에서부터 하나씩 쌍을 만들어 값을 비교하는 것으로 포인터를 0과 n-1로 주어 숫자쌍의 합에 따라 포인터를 이동시키면 된다. 자세한 문제풀이방법과 코드는 아래와 같다.

1. 입력받은 값들로 변수와 숫자리스트를 생성하여 저장한다.

2. 포인터들로 숫자쌍을 생성하여 숫자쌍의 합이 x보다 크면, 우측 포인터를 -1하고, x보다 작으면 좌측 포인터를 +1하여 비교하다가 좌측과 우측포인터의 차이가 1이면 조건문을 종료한다.

3. 조건문 종료 후 결과값을 출력한다.

 

n = int(input())
numbers = list(map(int, input().split()))
x = int(input())
numbers.sort()
cnt = 0
cp1 = 0
cp2 = n-1

cnt = 0
while cp1 < cp2:
    cp_value = sum([numbers[cp1], numbers[cp2]])
    if cp_value == x:
        cnt += 1
    if cp_value < x:
        cp1 += 1
    if cp_value >= x:
        cp2 -= 1
print(cnt)

 

P.S 개발자가 되기위해 공부중입니다. 잘못된 부분을 댓글로 남겨주시면 학습하는데 큰 도움이 될 거 같습니다.

728x90
반응형

댓글