728x90
2473번: 세 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상
www.acmicpc.net
🤔 문제분석
한 용액을 선택한뒤에 투포인터를 활용하여 해당 용액과 더했을때 0과 가까운 수를 찾으면된다. 이것도 마찬가지로 더했을때 0보다 크다면 right값을 감소시키고 0보다 작다면 left값을 증가시키면서 값을 찾아나아가면 된다.
아래의 두 용액 문제를 풀면 세 용액도 위의 설명한대로 문제를 해결 할 수 있다.
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 |