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

[์ธํ”„๋Ÿฐ/๋‹ค์ด๋‚˜๋ฏน(LIS)/์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€์ˆ˜์—ด]

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

<<ํ’€์ด>>

 

์šฐ์„  ์ด ๋ฌธ์ œ๋Š” LIS(์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด) ์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฐ€์ง„ ๋ฌธ์ œ์ด๋‹ค.

 

dynamic programming(๋™์ ๊ณ„ํš๋ฒ•)

 

์ค‘ ํ•˜๋‚˜๋กœ ์ฒ˜์Œ ํ‘ผ๋‹ค๋ฉด ์ƒ๊ฐํ•˜๊ธฐ๊ฐ€ ์กฐ๊ธˆ ์–ด๋ ค์šด ๋“ฏ ํ•˜๋‹ค ใ…‹ใ…‹ ใ…Žใ…Ž ๋‚ด๊ฐ€ ๊ทธ๋Ÿผ ..

 

์ด ๋ฌธ์ œ์˜ ์ ‘๊ทผ ๋ฐฉ์‹์€ ์•„๋ž˜ ์‚ฌ์ง„๊ณผ ๊ฐ™๋‹ค.

 

์ฒ˜์Œ ๊ฐ’์„ arr์— ๋„ฃ๊ณ  ๊ฐ™์€ ํฌ๊ธฐ์˜ ๋ฐฐ์—ด dy๋„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

dy๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋Š” ์ด์œ ๋Š” ๋น„๊ต๋ฅผ ํ†ตํ•ด ์ตœ์žฅ ๊ธธ์ด๋ฅผ ๊ตฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. 

 

for๋ฌธ์œผ๋กœ arr์ฒ˜์Œ ๋Œ๋ฉด์„œ ๊ทธ ๋ฐ‘์œผ๋กœ ์ž‘์€ ๊ฐ’์ด ์žˆ๋‹ค๋ฉด +1์„ ํ•ด์ฃผ๊ณ  dy์— ๋„ฃ๋Š” ํ˜•์‹์ด๋‹ค.

 

์ด๋Ÿฌํ•œ ๋…ผ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์ ‘๊ทผํ•˜๋ฉด ์ˆ˜์›”ํ•˜๊ฒŒ ํ’€ ์ˆ˜๊ฐ€ ์žˆ๋‹ค!!

 

 

import java.util.*;

class Main {
    static int[] dy;
    private int solution(int[] arr) {
        int answer = 0;
        dy = new int[arr.length];
        dy[0] = 1;
        for(int i=1; i<arr.length; i++) {
            int max = 0;
            for(int j=i-1; j>=0; j--) {
                if(arr[j] < arr[i] && dy[j] > max) max = dy[j];
            }
            dy[i] = max + 1;
            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();
        int[] arr = new int[n];

        for(int i=0; i<n; i++) {
            arr[i] = in.nextInt();
        }

        System.out.print(T.solution(arr));
    }
}

 

 

ํ’€์ด๋ฅผ ๋ณด๋ฉด ์ด์ค‘ for๋ฌธ์ด์ง€๋งŒ ํ•˜๋‚˜๋Š” ++์ผ๋•Œ์ด๊ณ  ๋‚ด๋ถ€๋Š” --์ด๋‹ค. ์ด๋Ÿฌํ•œ ์ƒ๊ฐ์ด ์–ด๋ ค์šด ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๋– ์˜ค๋ฅด๋Š” ๊ฒƒ ์—ญ์‹œ ์ต์ˆ™ํ•˜์ง€ ์•Š์œผ๋ฉด ํž˜๋“ค๋‹ค. ๊พธ์ค€ํžˆ ๊ณต๋ถ€ํ•ด์„œ ์ด๋Ÿฌํ•œ ๊ฒƒ๋„ ์œ ์—ฐํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด๋ณด์ž !!

๋Œ“๊ธ€