For Programmer

백준 2473번 파이썬 문제풀이(세 용액) 본문

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

백준 2473번 파이썬 문제풀이(세 용액)

유지광이 2022. 5. 11. 01:40
728x90

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

 

2473번: 세 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상

www.acmicpc.net


 

O(n^2) 에 해결할 수 있기 때문에 잘생각해보면 리스트 전체의 각 지점을 반복문을 돌면서 한점을 기준으로 잡고 바로 오른쪽을 시작점 마지막 인덱스를 끝지점으로 투포인터를 돌리면 되는 간단한 문제이다. 세개의 점을 찾아야하기 때문에 투포인터의 응용버전이라 조금 생소할 수도 있지만 이기회에 잘 익히자. 

(참고로 N^2 임에도 불구하고 아주큰수의 + 연산때문에 파이썬3에서는 시간초과가 발생한다. pypy3로 제출하자)

 

N = int(input())
arr = list(map(int, input().split()))
arr.sort()

ans = []  # i,s,e 순서
min_ = 1 << 40
for i in range(N - 2):
    # 출발점을 i + 1, 끝점을 N - 1로 잡는다.
    s, e = i + 1, N - 1

    while s < e:
        sum_ = arr[i] + arr[s] + arr[e]

        if abs(sum_) < abs(min_):
            min_ = sum_
            ans = [arr[i], arr[s], arr[e]]

        if sum_ < 0:
            s += 1
        elif sum_ > 0:
            e -= 1
        else:
            print(*sorted(ans))
            exit()

print(*sorted(ans))

 

728x90
Comments