๊ธฐ๋ก๋ฐฉ

BOJ_19621 : ํšŒ์˜์‹ค ๋ฐฐ์ • 2 ๋ณธ๋ฌธ

CodingTest/Java

BOJ_19621 : ํšŒ์˜์‹ค ๋ฐฐ์ • 2

Soom_1n 2023. 2. 20. 13:13

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

19621๋ฒˆ: ํšŒ์˜์‹ค ๋ฐฐ์ • 2

์„œ์ค€์ด๋Š” ์•„๋น ๋กœ๋ถ€ํ„ฐ N๊ฐœ์˜ ํšŒ์˜์™€ ํ•˜๋‚˜์˜ ํšŒ์˜์‹ค์„ ์„ ๋ฌผ๋กœ ๋ฐ›์•˜๋‹ค. ๊ฐ ํšŒ์˜๋Š” ์‹œ์ž‘ ์‹œ๊ฐ„, ๋๋‚˜๋Š” ์‹œ๊ฐ„, ํšŒ์˜ ์ธ์›์ด ์ฃผ์–ด์ง€๊ณ  ํ•œ ํšŒ์˜์‹ค์—์„œ ๋™์‹œ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํšŒ์˜๊ฐ€ ์ง„ํ–‰๋  ์ˆ˜ ์—†๋‹ค. ๋‹จ,

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ํšŒ์˜ ์‹œ๊ฐ„์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์˜๋ฅผ ์กฐ์ ˆํ•ด, ํšŒ์˜์— ์ฐธ์—ฌํ•œ ์ธ์›์˜ ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ํšŒ์˜ ๋ณ„ ์ตœ๋Œ€ ์ฐธ์—ฌ ์ธ์›์„ DP์— ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine());
        Meeting[] meetings = new Meeting[n];

        for (int i = 0; i < n; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            meetings[i] = new Meeting(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }

        Arrays.sort(meetings);

        int[] dp = new int[n];
        int max = meetings[0].people;

        dp[0] = meetings[0].people;

        for (int i = 1; i < n; i++) {
            for (int j = i; j >= 0; j--) {
                if (meetings[i].start > meetings[j].end && dp[i] < dp[j]) {
                    dp[i] = dp[j];
                }
            }
            dp[i] += meetings[i].people;
            max = Math.max(max, dp[i]);
        }
        System.out.println(max);
    }

    private static class Meeting implements Comparable<Meeting>{
        int start, end, people;

        public Meeting(int start, int end, int people) {
            this.start = start;
            this.end = end;
            this.people = people;
        }

        @Override
        public int compareTo(Meeting o) {
            return this.end - o.end;
        }
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ํšŒ์˜๋ฅผ ์ข…๋ฃŒ ์‹œ๊ฐ„ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌํ•œ๋‹ค.
  • dp ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ’์„ ์ฑ„์šด๋‹ค.
    • ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ํ•œ ํšŒ์˜๋ฅผ ์ง„ํ–‰ํ–ˆ์„๋•Œ, ํšŒ์˜ ์ธ์› ํ•ฉ์˜ ์ตœ๋Œ€๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
      • ์ด์ „์— ํšŒ์˜ ์ค‘ ์—ฐ์†์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ํšŒ์˜์˜ ์ฐธ์—ฌ ์ธ์› ์ตœ๋Œ€๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.
      • ๊ฐ–๊ณ  ์˜จ ์ฐธ์—ฌ ์ธ์› ์ตœ๋Œ€๊ฐ’์— ํ˜„์žฌ ํšŒ์˜์˜ ์ฐธ์—ฌ ์ธ์›์„ ๋”ํ•ด ์ €์žฅํ•œ๋‹ค.
    • ์ตœ๋Œ€๊ฐ’๊ณผ ๋น„๊ตํ•ด ์—…๋ฐ์ดํŠธํ•œ๋‹ค.
  • ์ตœ๋Œ€๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ํ’€์ด๋ฅผ ๋‹ค์‹œ๋ณด๋‹ˆ DP๊ฐ€ ๋งž๋‚˜ ์‹ถ๋‹ค. ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ํ’€์ดํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
    • ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ์ฐพ์•„๋ณด๋‹ˆ DFS ๋“ฑ์œผ๋กœ ํ’€์ดํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, DP๋Š” ๋‹ค๋ฅธ ํ’€์ด๊ฐ€ ๋งž๋‹ค.
    • ๋ฌธ์ œ ์ œํ•œ์— ์•ž ๋’ค๋กœ ์ธ์ ‘ํ•œ ํšŒ์˜๋งŒ ์‹œ์ž‘,๋์ด ๊ฒน์นœ๋‹ค๊ณ  ํ–ˆ์œผ๋ฏ€๋กœ,
      ์ ํ™”์‹์€ dp[i] = Math.max(dp[i-1], dp[i-2]+arr[i]) ๊ฐ€ ๋œ๋‹ค.

728x90