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

 

2473번: 세 용액

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

www.acmicpc.net

유형 : 투포인터 (이분탐색도 가능하다는데 아직 잘..)

난이도 : G3 (G4가 더 맞다 생각이 든다)

 

전형적인 투포인터 문제입니다

투포인터 알고리즘을 모르시면 두 용액 문제 및 알고리즘을 보고 오시면 될거 같네요

두 용액 문제에서 하나가 더 늘었으므로 하나를 빼줘서 계산하시면 됩니다.

네 용액이면...좀 골때리겠네..

import sys

input = sys.stdin.readline

n = int(input())

nums = list(map(int, input().split()))

nums.sort()
min_mix = 20e9+1

if nums[0] > 0:
    ans = nums[0:3]
elif nums[-1] < 0:
    ans = nums[-3:]
else:
    for i in range(len(nums)-2):
        liqud = nums.pop(0)
        n -= 1
        start, end = 0, n-1
        
        while start < end:
            temp = liqud + nums[start] + nums[end]
            
            if abs(temp) < min_mix:
                ans = [liqud, nums[start], nums[end]]
            min_mix = min(abs(temp), min_mix)
            if temp > 0:
                end -= 1
            elif temp == 0:
                break
            else:
                start += 1

print(*ans)

제건 파이썬으로 안돌아갑니다 시간 초과라 ㅠㅠ..

pypy3로 돌렸고..

아마 더 좋은 코드는 널렸을거에요

'PS > Blind' 카테고리의 다른 글

[백준] 29261 - 소수 세기  (0) 2023.09.07
백준 19134 - 2x + 2  (0) 2023.09.05
백준 1511 - 숫자 만들기  (0) 2023.07.06
백준 1240 - 노드사이의 거리  (0) 2023.07.05
백준 17616 - 등수 찾기 Python  (0) 2023.07.05

+ Recent posts