[코드트리] - 2개씩 그룹짓기 2 ⭕

LSDrug·2024년 8월 19일
0

문제풀이

목록 보기
17/21


https://www.codetree.ai/missions/5/problems/group-of-pairs-2?&utm_source=clipboard&utm_medium=text


풀이

이전까지 문제들이 쉬운 관계로 좀 더 어려운 문제를 풀어보기로 했다.

문제를 읽어보면 2개의 수의 차이 중 최솟값이 최대가 되어야 한다.

이 말은 다르게 말하면 서로 비슷한 수의 차최대값이 되도록 하게 만들어야 한다는 것이다.

이를 토대로 다음과 같이 생각할 수 있다.

  1. 수를 입력 받는다.
  2. 수를 오름차순으로 정렬한다.
  3. 현 주소의 수와 그 다음 주소의 수의 차를 구한다.
  4. 그들 중 최대값을 구한다.

코드

코드는 다음과 같다.

#include <iostream>
#include <vector>
#include <algorithm>
#include <limits>
#include <limits.h>
#include <cmath>

using namespace std;

int main() {
    int n;
    cin >> n;

    vector<int> arr(2 * n);
    for (int i = 0; i < 2 * n; i++) {
        cin >> arr[i];
    }

    // 배열을 정렬합니다.
    sort(arr.begin(), arr.end());

    for(int i = 0; i < arr.size(); i++) {
        cout << arr[i] << " ";
    }

    cout << endl;

    // 두 원소의 차이의 최솟값을 최대화하기 위해
    long long min_diff = LLONG_MAX; // 최대값 지정

    for (int i = 0; i < n; i++) {
        min_diff = min(min_diff, static_cast<long long>(arr[n + i] - arr[i]));
    }

    cout << min_diff << endl;

    return 0;
}

여기서 static_cast는 해당 수의 차이를 정적 longlong 타입으로 보정해주는 함수이다.

여기서 주의해야 할 것은 바로 이 부분인데

n과 주어지는 수의 범위가 매우 크기 때문에 int 범위를 벗어나는 수가 주어질 수 있다. 따라서 최대 범위인 longlong을 사용하는 것이 좋다.

또한 static_cast를 사용하지 않으면 컴파일을 할 때 오류가 날 수 있기 때문에 반드시 사용해주는 게 좋다.


profile
마약같은 코딩, 마약같은 코딩러

0개의 댓글

관련 채용 정보