알고리즘 모음(C++)

백준 2467 - 용액(C++) 본문

백준

백준 2467 - 용액(C++)

공대생의 잡다한 사전 2023. 1. 17. 19:43

문제 링크입니다. https://www.acmicpc.net/problem/2467

 

2467번: 용액

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

www.acmicpc.net

투포인터를 사용하는 문제입니다.

투포인터는 조건에 따라 양쪽 끝을 하나씩 줄여가면서 원하는 값을 찾는 방법입니다.

 

2개의 용액을 선택해 두 수의 차의 최솟값(절댓값)을 구하는 문제입니다.

그렇다면 크기 순으로 정렬한 뒤, 가장 큰 수와 가장 작은 수를 선택하면서 시작합니다.

그 후, 조건에 따라 자신보다 큰 수 혹은 작은 수를 선택해가면 답이 나올 것입니다.

 

문제 예시를 통해 확인해보겠습니다.

 

 

자세한 것은 코드를 참고해주세요

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>
#include <stack>
#define P pair<int,int>
#define PP pair<P, int>
#define F first
#define S second
#define LL long long

using namespace std;

int N;
int arr[100001];

void solve(){
    int start = 0, fin = N-1;
    LL left = arr[0], right = arr[N-1];
    LL sum = left + right;
    while(start < fin){
        LL Next = arr[start] + arr[fin];
        if(abs(sum) > abs(Next)){
            sum = Next;
            left = arr[start];
            right = arr[fin];
        }
        if(Next <= 0) start++;
        else fin--;
    }
    cout << left << " " << right;
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N;
	for(int i = 0; i < N; i++) cin >> arr[i];
	solve();
	return 0;
}

 

 

질문 및 조언은 댓글을 남겨주세요

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

백준 2239 -스도쿠(C++)  (0) 2023.01.18
백준 2473 - 세 용액(C++)  (0) 2023.01.17
백준 2470 - 두 용액(C++)  (0) 2023.01.16
백준 27112 - 시간 외 근무 멈춰!(C++)  (0) 2023.01.16
백준 3053 - 택시 기하학(C++)  (0) 2023.01.15