일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 노마드코더
- 우박수열 정적분 파이썬
- 카카오코테
- 코딩테스트공부
- 프로그래머스 17677
- 프로그래머스 방금그곡
- 방금그곡 파이썬
- 코테공부
- 프로그래머스
- 프로그래머스파이썬
- 노마드코더리액트
- 리액트 훅
- 프로그래머스 17683 파이썬
- 뉴스 클러스터링 파이썬
- 백준 타일링 문제
- 프로그래머스 우박수열
- 우박수열 파이썬
- 프로그래머스 카카오코테
- 프로그래머스 134239 파이썬
- 노마드코더 리액트
- 리액트공부
- 백준문제풀이
- 노마드코더 리액트 노트정리
- 리액트 독학
- 2022카카오코테
- 백준 DP 문제풀이
- 코테 공부
- 리액트 공부정리
- PostgreSQL
- 17677 파이썬
- Today
- Total
My Develop Log
[백준] 2470 두 용액 본문
문제
KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다. 산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.
같은 양의 두 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 두 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다.
예를 들어, 주어진 용액들의 특성값이 [-2, 4, -99, -1, 98]인 경우에는 특성값이 -99인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액이 특성값이 0에 가장 가까운 용액이다. 참고로, 두 종류의 알칼리성 용액만으로나 혹은 두 종류의 산성 용액만으로 특성값이 0에 가장 가까운 혼합 용액을 만드는 경우도 존재할 수 있다.
산성 용액과 알칼리성 용액의 특성값이 주어졌을 때, 이 중 두 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액을 찾는 프로그램을 작성하시오.
입력
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.
출력
첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 두 용액의 특성값을 출력한다. 출력해야 하는 두 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.
예제 입력 1
5
-2 4 -99 -1 98
예제 출력 1
-99 98
문제풀이
import sys
input = sys.stdin.readline
n = int(input().rstrip())
# 산성 용액과 알칼리성 용액의 특성값 입력 후 정렬
data=list(map(int,input().split()))
data.sort()
# 처음과 끝 포인터 지정
start=0
end=n-1
# 처음 data[start]와 data[end] 합의 절댓값을 임의 result에 저장
# case에 각각 data[start]와 data[end] 저장
result=abs(data[start]+data[end])
case=(data[start],data[end])
# 이분탐색 시작
while start<end:
# data[start]와 data[end] 합의 절댓값을 check에 저장 후 result와 비교 후 갱신
check=data[start]+data[end]
if result>=abs(check):
result=abs(check)
case=(data[start],data[end])
# check 값이 음수이면 start+=1 , 양수이면 end-=1 진행 후 다시 이분탐색
if check < 0:
start+=1
else:
end-=1
print(case[0],case[1])
Reference
https://www.acmicpc.net/problem/2470
2470번: 두 용액
첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00
www.acmicpc.net
'코테 공부 > 백준' 카테고리의 다른 글
[백준] 11727 2xn 타일링 2 (0) | 2023.05.20 |
---|---|
[백준] 1012 유기농 배추 (0) | 2023.04.19 |
[백준] (BFS/DFS) - 10026 적록색약 (0) | 2023.04.07 |
[백준] (이진탐색) - 6236 용돈 관리 (0) | 2023.03.22 |
[백준] (이분탐색) - 1072 게임 (0) | 2023.03.13 |