코딩테스트/BOJ

[백준][이진탐색] 2473. 세 용액

박소민 2023. 4. 29. 21:18
2473. 세 용액
 

2473번: 세 용액

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

www.acmicpc.net

 

  • 내 풀이: fail
    •  n개의 원소 중 임의의 3개를 뽑아서 합을 구하는 방식으로 하게 되면 시간복잡도가 O(n^3)까지 올라감
    •  →투 포인터를 사용해서 O(n^2)으로 풀어야 통과할 수 있다. 
    • minV값을 int(1e9) 써서 틀린 거였음 ㅡㅡ.......
      • -> float('inf') 로 사용해야 통과....... 
import sys
input=sys.stdin.readline

n=int(input())
lst=sorted(list(map(int,input().split())))
minV=float('inf')
answer=[]

def solve(n):
    global minV
    global answer
    tmp=[]
  
    for i in range(n-2):
        left=i+1
        right=n-1
  
        while left<right:
            tmp=[lst[i],lst[left],lst[right]]
    
            if minV>abs(sum(tmp)):
                minV=abs(sum(tmp))
                answer=tmp[:]
              
            if sum(tmp) >0:
                right-=1
            elif sum(tmp) <0: 
                left+=1
            else: #0이면
                answer=tmp[:]
                return answer
    return answer

answer=solve(n)
print(*sorted(answer))

 

  •