PS/백준

[BOJ] 2473 세 용액

uyt8989 2022. 1. 31. 20:53
 

2473번: 세 용액

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

www.acmicpc.net

문제

KOI 부설 과학연구소에서는 많은 종류의 산성 용액과 알칼리성 용액을 보유하고 있다. 각 용액에는 그 용액의 특성을 나타내는 하나의 정수가 주어져있다.  산성 용액의 특성값은 1부터 1,000,000,000까지의 양의 정수로 나타내고, 알칼리성 용액의 특성값은 -1부터 -1,000,000,000까지의 음의 정수로 나타낸다.

같은 양의 세 가지 용액을 혼합한 용액의 특성값은 혼합에 사용된 각 용액의 특성값의 합으로 정의한다. 이 연구소에서는 같은 양의 세 가지 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들려고 한다. 

예를 들어, 주어진 용액들의 특성값이 [-2, 6, -97, -6, 98]인 경우에는 특성값이 -97와 -2인 용액과 특성값이 98인 용액을 혼합하면 특성값이 -1인 용액을 만들 수 있고, 이 용액이 특성값이 0에 가장 가까운 용액이다. 참고로, 세 종류의 알칼리성 용액만으로나 혹은 세 종류의 산성 용액만으로 특성값이 0에 가장 가까운 혼합 용액을 만드는 경우도 존재할 수 있다.

산성 용액과 알칼리성 용액이 주어졌을 때, 이 중 같은 양의 세 개의 서로 다른 용액을 혼합하여 특성값이 0에 가장 가까운 용액을 만들어내는 세 용액을 찾는 프로그램을 작성하시오.

입력

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 3 이상 5,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,000,000 이하이다. N개의 용액들의 특성값은 모두 다르고, 산성 용액만으로나 알칼리성 용액만으로 입력이 주어지는 경우도 있을 수 있다.

출력

첫째 줄에 특성값이 0에 가장 가까운 용액을 만들어내는 세 용액의 특성값을 출력한다. 출력해야하는 세 용액은 특성값의 오름차순으로 출력한다. 특성값이 0에 가장 가까운 용액을 만들어내는 경우가 두 개 이상일 경우에는 그 중 아무것이나 하나를 출력한다.


얼마 전에 푼 용액 문제의 고등부 버전이다. 첫번째 문제는 정렬을 하지 않아도 되는 문제, 두번째 문제는 정렬만 추가하면 되는 문제였고, 이번 문제는 용액을 두개 고르는 것에서 세개 고르는 것으로 업그레이드 됐다. 두 용액 문제는 이전에 풀기도 했고 정렬만 해주면 되기 때문에 패스했다.

 

용액을 3개 골라야하기 때문에 벡터 상의 위치를 3개 알고있어야 한다. 이전 문제와 거의 똑같은 방법이지만 이번 문제에서는 일단 용액 하나를 고른 다음에 용액 문제를 풀었다. 사실상 용액 문제를 N번 푸는 것과 동일하다.

 

문제를 푸는 와중에 중간에 temp 값을 저장하는 부분에서 절댓값으로 저장했었다. 그랬더니 문제가 제대로 해결되지 않았다. 저번에 용액 문제를 풀 때는 temp 값을 저장하지 않고 풀어서 생각하지 못 했던 부분이었다. 

 

 

후기)

초등부 문제랑 고등부 문제랑 크게 다르지 않은 것 같다. STL을 사용하지 못 했다면 조금 귀찮은 문제였겠지만 STL을 사용하니 구현이 어려운 문제도 아니었다.

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

[BOJ] 1766 문제집  (7) 2022.02.02
[BOJ] 17406 배열 돌리기 4  (0) 2022.02.01
[BOJ] 2623 음악프로그램  (1) 2022.01.30
[BOJ] 17471 게리맨더링  (0) 2022.01.29
[BOJ] 2467 용액  (0) 2022.01.28