[BOJ] 12892. ์ƒ์ผ ์„ ๋ฌผ (๐ŸŽ, ํˆฌ ํฌ์ธํ„ฐ)

lemythe423ยท2024๋…„ 3์›” 18์ผ
0

BOJ ๋ฌธ์ œํ’€์ด

๋ชฉ๋ก ๋ณด๊ธฐ
131/133
post-thumbnail

๐Ÿ”—

ํ’€์ด

์„ ๋ฌผ ๊ฐ€๊ฒฉ๋“ค์€ D์ด์ƒ์ด ์ฐจ์ด๋‚˜๋ฉด ์•ˆ ๋œ๋‹ค. ์ตœ๋Œ€ ๊ฐ’๊ณผ ์ตœ์†Œ๊ฐ’์˜ ๊ฐ€๊ฒฉ ์ฐจ์ด๊ฐ€ ๊ฐ€์žฅ ํด ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฐ’์ด D์ด์ƒ์ด ๋˜๋ฉด ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋นผ์•ผ ํ•œ๋‹ค.

์ด๋•Œ N์ด 10๋งŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์กฐํ•ฉํ•ด์„œ ๊ตฌํ•˜๋Š” ๊ฒƒ์€ 2์ดˆ ๋‚ด์— ์—ฐ์‚ฐ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋Œ€์‹  ์„ ๋ฌผ์˜ ๊ฐ€๊ฒฉ์„ ๊ธฐ์ค€์œผ๋กœ ์–ด๋–ค ๊ฒƒ์„ ๋„ฃ์„ ๊ฒƒ์ด๊ณ  ๋บ„ ๊ฒƒ์ธ์ง€ ์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์„ ๋ฌผ ๊ฐ€๊ฒฉ์„ ๊ธฐ์ค€์œผ๋กœ ํ•˜์—ฌ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ ์ฐจ๋ก€๋Œ€๋กœ ํ•˜๋‚˜์”ฉ ์„ ๋ฌผ์„ ์ฃผ๋ฉด์„œ ๋งŒ์กฑ๋„์˜ ํ•ฉ์„ ๊ตฌํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ํ˜„์žฌ ๋„ฃ์œผ๋ ค๊ณ  ํ•˜๋Š” ์„ ๋ฌผ์˜ ๊ฐ€๊ฒฉ์ด ํ˜„์žฌ ๊ฐ•๋ฏผ์ด์—๊ฒŒ ์ฃผ๋ ค๊ณ  ํ•˜๋Š” ์„ ๋ฌผ๋“ค ๊ฐ€์šด๋ฐ ์ตœ์†Œ์ธ ๊ฐ€๊ฒฉ๊ณผ D์ด์ƒ ์ฐจ์ด๋‚  ๊ฒฝ์šฐ ์ตœ์†Œ ๊ฐ€๊ฒฉ์˜ ์„ ๋ฌผ์— ํ•ด๋‹นํ•˜๋Š” ๋งŒ์กฑ๋„๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

ํ•ด๋‹น ๊ณผ์ •์€ ํˆฌ ํฌ์ธํ„ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€์ดํ–ˆ๋‹ค.

import java.util.*;
import java.io.*;

public class Main {
    static final int MOD = 1_000_000_007;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int N = Integer.parseInt(st.nextToken());
        int D = Integer.parseInt(st.nextToken());
        
        int P;
        int V;
        int[][] gifts = new int[N][2];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            P = Integer.parseInt(st.nextToken());
            V = Integer.parseInt(st.nextToken());
            gifts[i][0] = P;
            gifts[i][1] = V;
        }

        Arrays.sort(gifts, (o1, o2) -> o1[0] - o2[0]);
        
        int low = 0;
        long maxSum = 0;
        long tmpSum = 0;
        for (int i = 0; i < N; i++) {
            tmpSum += gifts[i][1];
            while (gifts[i][0] >= gifts[low][0] + D) {
                tmpSum -= gifts[low][1];
                low++;
            }
            maxSum = Math.max(maxSum, tmpSum);
        }

        System.out.println(maxSum);
    }
}
profile
์•„๋ฌด๋ง์ด๋‚˜ํ•˜๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€