본문 바로가기
Python3/백준 알고리즘

2022.04.09 [백준] (파이썬 python) 두 수의 합

by ian's coding 2022. 4. 9.
728x90
반응형

 

https://www.acmicpc.net/problem/3273

 

3273번: 두 수의 합

n개의 서로 다른 양의 정수 a1, a2, ..., an으로 이루어진 수열이 있다. ai의 값은 1보다 크거나 같고, 1000000보다 작거나 같은 자연수이다. 자연수 x가 주어졌을 때, ai + aj = x (1 ≤ i < j ≤ n)을 만족하는

www.acmicpc.net

 


풀이

처음 이 문제를 단순히 for문을 돌려 모든 상황을 고려해 풀이 했지만 시간초과가 발생했다.

그래서 두 포인터를 사용하여 코드를 작성하였다.

우선 배열을 정렬한 후, left, right를 0, n-1로 설정해 주었다. 

이 후, while문을 돌려 arr[left] + arr[right]를 temp에 저장 후, x와 같으면 cnt를 1 증가시키고 left를+1증가 시키고 다음 while문으로 넘어간다. 만약 temp가 x보다 작으면 left를 1증가시켜준다. 이유는 x보다 작으면 left를 증가시켜 주어야 최소값을 증가시키기 때문이다. 그리고 x보다 크면 right값을 1감소 시킨다. 

그리고 left와 right가 같아지면 while문을 종료한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
n=int(input())
arr=list(map(int,input().split()))
x=int(input())
cnt=0
arr.sort()
left=0
right=n-1
while left<right:
    temp=arr[left]+arr[right]
    if temp == x:
        cnt+=1
        left+=1
    elif temp < x:
        left+=1
    else:
        right-=1
print(cnt)
cs

 

 

 

 

 

728x90
반응형

댓글