๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[์ธํ”„๋Ÿฐ/LIS/๊ฐ€์žฅ ๋†’์€ ํƒ‘ ์Œ“๊ธฐ]

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 9. 8.

์˜ค๋Š˜์€ LIS(์ตœ๋Œ€๋ถ€๋ถ„ ์ฆ๊ฐ€์ˆ˜์—ด ์•Œ๊ณ ๋ฆฌ์ฆ˜)์„ ํ™œ์šฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด์•˜๋‹ค.

 

์šฐ์„ ์ ์œผ๋กœ ํŠน์ • ํ•œ ๋ถ€๋ถ„์„ ์ •๋ ฌ์„ ํ•˜๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ์›ํ™œํ•˜๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

ํ•˜์ง€๋งŒ ์ด ๋ฌธ์ œ๋ฅผ ์ œ๋Œ€๋กœ ํ’€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„์•ผ ํ•˜๊ณ , ์•„๋ž˜์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” dy์˜ ๊ฐœ๋…์„ ์ž˜ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.

 

<<ํ’€์ด>>

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

class Brick implements Comparable<Brick> {

    public int s, h, w;
    Brick(int s, int h, int w) {
        this.s = s;
        this.h = h;
        this.w = w;
    }

    @Override
    public int compareTo(Brick o) {
        return o.s - this.s;
        // ์ด๊ฒŒ ๋‚ด๋ฆฌ์ฐจ์ˆœ ํ˜•์‹
    }
}


class Main {
    static int[] dy;
    int solution(ArrayList<Brick> arr) {
        int answer = 0;
        Collections.sort(arr);
        dy[0] = arr.get(0).h;
        answer = dy[0];
        for (int i = 1; i < arr.size(); i++) {
            int max_h = 0;
            for (int j = i-1; j >=0 ; j--) {
                if(arr.get(i).w < arr.get(j).w && dy[j] > max_h) {
                    max_h = dy[j];
                }
                dy[i] = arr.get(i).h + max_h;
                answer = Math.max(answer, dy[i]);
            }
        }
        return answer;
    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();

        ArrayList<Brick> arr = new ArrayList<Brick>();
        dy = new int[n];
        for (int i = 0; i < n; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            int c = in.nextInt();
            arr.add(new Brick(a, b, c));
        }

        System.out.println(T.solution(arr));



    }
}

 

 

1. ์šฐ์„  ๊ฐ’๋“ค์„ ๋„ฃ์„ ํด๋ž˜์Šค ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด ์ค€๋‹ค.(Brick)

2. implements๋กœ Comparable ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

3. ๊ทธ๋‹ค์Œ compareTo ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•ด์ค€๋‹ค.

4. Brick.o - this.o ๋Š” ๋‚ด๋ฆผ์ฐจ์ˆœ this.o - Brick.o ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‹ค.

5. ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๋งŒ๋“œ๋Š” ํ˜•ํƒœ๋กœ ํ•œ๋‹ค.

6. ๊ทธ๋‹ค์Œ solution ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ตฌ์ƒํ•˜๋Š”๋ฐ, Collection.sort()๋กœ ๊ฐ์ฒด๋ฅผ ์ •๋ ฌํ•œ๋‹ค.

7. dy ๋ฐฐ์—ด์„ ํ™œ์šฉํ•ด์„œ ๊ฐ ๊ฐ์ฒด๊ฐ€ ์ž๊ธฐ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋†’์ด์˜ ๊ฐ’์„ ๊ตฌํ•œ ๋’ค, dy์—๋‹ค๊ฐ€ ๋„ฃ์–ด์ค€๋‹ค.

8. dy๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ณผ์ •์—์„œ Math.max ๋กœ answer ๊ฐ’์„ ์ถ”์ถœํ•œ๋‹ค.

 

์ „์ฒด์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ๊ตฌ์„ฑ์œผ๋กœ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ’€์–ด๋‚˜๊ฐ€๋ฉด ๋œ๋‹ค.

 

์–ด๋–ป๊ฒŒ ๋ณด๋ฉด ์‰ฌ์šด ๋ฌธ์ œ์ผ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ฒ˜์Œ ํ•˜๋ฉด ์•ฝ๊ฐ„์€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ๊ณ  ๊ทธ๋กœ์ธํ•ด ์™€๋‹ฟ์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋‚˜๋„ ์ดํ•ด๋Š” ํ–ˆ์ง€๋งŒ ๋งŒ์•ฝ ํ˜ผ์ž ๋‹ค์‹œ ํ’€์–ด๋ผ๊ณ  ํ•œ๋‹ค๋ฉด ํ’€ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ ์กฐ๊ธˆ ๋А๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

๊ฒฐ๊ตญ, ๋ฐ˜๋ณต๋œ ๊ณต๋ถ€๋กœ ์ต์ˆ™ํ•ด์ง€๊ณ  ์—ฌ๋Ÿฌ ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ ๋…ผ๋ฆฌ์ ์ธ ์‚ฌ๊ณ ๋ฅผ ๊ธธ๋Ÿฌ ๋‚˜๊ฐ„๋‹ค๋ฉด ์ถฉ๋ถ„ํžˆ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณธ๋‹ค.

๋Œ“๊ธ€