본문 바로가기

알고리즘/백준

[백준] 2473번 : 세 용액

728x90

2473번: 세 용액

 

2473번: 세 용액

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

www.acmicpc.net

🤔 문제분석

한 용액을 선택한뒤에 투포인터를 활용하여 해당 용액과 더했을때 0과 가까운 수를 찾으면된다. 이것도 마찬가지로 더했을때 0보다 크다면 right값을 감소시키고 0보다 작다면 left값을 증가시키면서 값을 찾아나아가면 된다.

아래의 두 용액 문제를 풀면 세 용액도 위의 설명한대로 문제를 해결 할 수 있다.

2470번: 두 용액

 

2470번: 두 용액

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

www.acmicpc.net

💻 코드

import sys
input = sys.stdin.readline

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

min_value = sys.maxsize
ans = [-1, -1, -1]
for cur in range(N-2):
    left = cur+1
    right = N-1
    while left < right:
        cost = data[cur] + data[left] + data[right]
        
        if min_value > abs(cost):
            min_value = abs(cost)
            ans = [data[cur], data[left], data[right]]
        
        if cost == 0:
            break
        
        if cost > 0:
            right -= 1
        else:
            left += 1
            
print(ans[0], ans[1], ans[2])

🎯 피드백 및 개선사항

한 용액을 선택하여 나머지 용액들을 투포인터로 탐색해나아가는데 이런 아이디어를 도출하는과정이 어려웠다. 정렬과 투포인터 유형을 많이 익혀서 어떻게 접근해야할지 연습을 꾸준히 하자 😀

728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 2170번 : 선 긋기  (0) 2024.02.13
[백준] 2230번 : 수 고르기  (2) 2024.02.13
[백준] 2470번 : 두 용액  (0) 2024.02.12
[백준] 2212번 : 센서  (0) 2024.02.11
[백준] 1461번 : 도서관  (1) 2024.02.11