728x90
풀이 과정
해당 문제는 단순한 투 포인터 문제이다.
두 값의 합이 0과 가까운 쌍을 찾으면 끝이다.
1. 주어진 x 배열을 정렬시킨다.
2. 문제에서 수들의 합이 매우 크기 때문에
minV를 매우 큰 값으로 설정하였다.
3. 투 포인터를 사용하기 때문에 0번째 인덱스와 n-1 인덱스부터 시작한다.
4. 오른쪽 인덱스 s와 왼쪽 인덱스 e의 합을 m으로 지정한다.
5. 절댓값 m이 minV보다 작을 경우
minV를 m으로 업데이트해준다.
ans를 현재 x [s], x [e]로 업데이트해준다.
6. minV이 0이면 반복문을 종료하고 현재 ans을 출력한다.
7. m 값이 0보다 작을 경우 오른쪽 인덱스를 증가시키고
반대일 경우 왼쪽 인덱스를 감소시킨다.
풀이 코드
n,*x= map(int,open(0).read().split()); x.sort()
minV,s,e,ans = 2e+10,0,n-1,None
while s < e :
m = x[s] + x[e]
if abs(m) < minV :
minV,ans = abs(m),(x[s],x[e])
if minV == 0 : break
elif m < 0 : s += 1
else : e -= 1
print(*ans)
'Language > Python' 카테고리의 다른 글
[Python][백준 2632][누적합] 피자판매 - 컴도리돌이 (0) | 2022.08.04 |
---|---|
[Python][백준 12015][이분 탐색] 가장 긴 증가하는 부분 수열 2 - 컴도리돌이 (0) | 2022.07.30 |
[Python][백준 2234][BFS] 성곽 - 컴도리돌이 (0) | 2022.07.28 |
[Python][백준 2212][정렬][그리디] 센서 - 컴도리돌이 (0) | 2022.07.27 |
[Python][백준 2133][DP] 타일 채우기 - 컴도리돌이 (0) | 2022.07.26 |