코딩테스트/백준

[백준] 2467.용액 (Swift)

도지대디 2022. 5. 23. 23:31

[백준] 2467.용액 (Swift)

https://www.acmicpc.net/problem/2467

 

2467번: 용액

첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하의 정수이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 오름차순으로 입력되며, 이 수들은 모두 -

www.acmicpc.net

풀이

투포인터로 해결할 수 있는 문제입니다.

 

용액들의 값은 정렬된 상태로 주어지기 때문에 특성값이 0에 가까워지려면 더해지는 두 용액의 절대값의 차이가 작아야 합니다.

 

그렇기 때문에 초기 포인터는 양쪽 끝, 즉 최소값과 최대값을 가리키고 있어야 합니다.

 

2개의 포인터가 가리키는 값을 더한 다음 절대값을 씌워줍니다. 해당 값이 작을수록 0에 가깝다는 의미이기 때문에 조건을 만족할때마다 미리 선언해둔 변수에 업데이트 시켜줍니다.

 

계속 격차를 줄여야하기 때문에 더한 값이 음수가 나온다면 작은 쪽 포인터를 1 증가시켜야 하고, 더한 값이 양수가 나온다면 큰 쪽 포인터를 1 감소시켜야 합니다.

 

항상 인덱스는 작은 쪽 포인터가 큰 쪽 포인터보다 작아야 하기 때문에 이를 반복문의 조건으로 넣어주면 됩니다.

 

위와 같은 방법으로 문제를 풀이할 수 있습니다.

코드