PS

BOJ 10025 : 게으른 백곰

lickelon 2025. 1. 23. 21:19
  • 문제 링크 : boj.kr/10025
  • 난이도 : S3
  • 태그 : 두 포인터

코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int n, k;
    cin >> n >> k;
    vector<pii> arr(n);
    for(auto &e : arr) cin >> e.second >> e.first;
    sort(all(arr));

    int l = 0;
    int sum = arr[0].second;
    int ans = sum;
    for(int r = 1; r < n; r++) {
        sum += arr[r].second;
        while(arr[r].first - 2*k > arr[l].first) {
            sum -= arr[l].second;
            l++;
        }
        ans = max(sum, ans);
    }
    cout << ans;

    return 0;
}

풀이

좌표에 따라 얼음 양동이를 정렬한다.

양동이의 좌표가 아닌 정렬된 번호를 기준으로 l과 r 구간을 잡는다.

이때 l과 r의 좌표 차이가 2k 이하이고 r-l이 최대가 되도록 l을 잡아준다.

r에 따라 l이 정해지고, r이 증가하면 l이 증가하므로 두 포인터를 이용해 문제를 해결할 수 있다.

728x90

'PS' 카테고리의 다른 글

BOJ 33257 : 상현이의 물리학및실험1 실험 대작전  (0) 2025.01.25
BOJ 2823 : 유턴 싫어  (0) 2025.01.24
BOJ 11060 : 점프 점프  (0) 2025.01.22
BOJ 10866 : 덱  (0) 2025.01.21
BOJ 29160 : 나의 FIFA 팀 가치는?  (0) 2025.01.20