[BaekJoon] 백준 2473번 : 세 용액

Updated:

2473번 : 세 용액


[BaekJoon] 백준 2467번 : 용액 의 업그레이드 문제이다.

포인터 두 개를 어떤 기준으로 잡고 옮길지만 정하면 풀 수 있는 문제였는데 정말 어려웠다..

처음엔 두 개를 고정시키고 한 개를 움직이며 비교했지만 시간초과가 발생했다.

기준을 하나 두고 포인터 두 개를 정한 뒤 값을 더해 음수이면 왼쪽 포인터를 오른쪽으로

양수이면 오른쪽 포인터를 왼쪽으로 옮겨가며 값을 비교하면 된다.

골드 4 였지만 정말 어려웠다..


def solution():
    answer = [float('inf'), 0, 0, 0]

    for i in range(N - 2):
        start, end = i + 1, N - 1

        while start != end:
            total = arr[i] + arr[start] + arr[end]

            if abs(total) < abs(answer[0]):
                answer = [total, i, start, end]

            if total < 0:
                start += 1
            elif total > 0:
                end -= 1
            else:
                print(f"{arr[i]} {arr[start]} {arr[end]}")
                exit(0)

    print(f"{arr[answer[1]]} {arr[answer[2]]} {arr[answer[3]]}")
    exit(0)


if __name__ == "__main__":
    N = int(input())
    arr = list(map(int, input().split()))
    arr.sort()

    solution()



Categories:

Updated:

Leave a comment