1 ๋ถ„ ์†Œ์š”

๐Ÿ“ [S2_11053] ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด

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

public class Main{
    static StringTokenizer st;
    static int[] arr, dp;
    static int N;
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // ์ˆ˜์—ด์˜ ํฌ๊ธฐ
        N = Integer.parseInt(br.readLine());

        // ์ˆ˜์—ด ๊ฐ’ ์ €์žฅ
        arr = new int[N];

        // ๋น„๊ตํ•œ ๊ฐ’ ์ €์žฅ
        dp = new int[N];

        // ์ฒ˜์Œ ๊ฐ’์€ 0 ์ด๋‹ค
        int LIS = 0;

        // ๋ฐฐ์—ด ์ž…๋ ฅ
        st = new StringTokenizer(br.readLine(), " ");
        for(int i=0; i<N; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        for(int i=0; i<N; i++){

            // dp ๋ฐฐ์—ด์— ์ €์žฅ๋  ์œ„์น˜
            int idx = BinarySearch(arr[i], 0, LIS, LIS+1);

            // ๋ชป์ฐพ์€๊ฒฝ์šฐ
            if(idx == -1){
                dp[LIS] = arr[i];
                LIS++;
            }
            // ์ฐพ์€ ๊ฒฝ์šฐ
            else{
                dp[idx] = arr[i];
            }
        }
        System.out.println(LIS);
    }

    // ์ด๋ถ„ ํƒ์ƒ‰์„ ํ†ตํ•ด์„œ ์œ„์น˜ ์ฐพ๊ธฐ
    public static int BinarySearch(int num, int start, int end, int size) {
        int res = 0;
        while(start<=end){
            // ์ค‘์•™ ๊ฐ’์„ ์ฐพ๋Š”๋‹ค
            int mid = (start+end)/2;

            // ํ˜„์žฌ ์„ ํƒ๋œ ์›์†Œ๊ฐ€ ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด ์•ž๋ถ€๋ถ„ ํƒ์ƒ‰
            if(num <= dp[mid]){
                res = mid;
                end = mid-1;
            }
            // ํ˜„์žฌ ์„ ํƒ๋œ ์›์†Œ๊ฐ€ ํ•ด๋‹น ์›์†Œ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ๋’ท ๋ถ€๋ถ„ ํƒ์ƒ‰
            else {
                start = mid + 1;
            }
        }
        // dp ํ…Œ์ด๋ธ”์—์„œ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ๋ชป์ฐพ์€ ๊ฒฝ์šฐ ( ๋ชจ๋“  ์ˆ˜๋“ค๋ณด๋‹ค ํฐ ๊ฒฝ์šฐ )
        if(start==size){
            return -1;
        }
        // dp ํ…Œ์ด๋ธ”์—์„œ ์‚ฝ์ž…๋  ์œ„์น˜๋ฅผ ์ฐพ์€ ๊ฒฝ์šฐ
        else{
            return res;
        }
    }
}

๐Ÿค” ๋‚˜์˜ ์ƒ๊ฐ

LIS ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ์ด๋‹ค.
์ด ๋ฌธ์ œ๋ฅผ ํ’€๋ฉด์„œ LIS๋ฅผ ๊ณต๋ถ€ํ•˜์˜€๋Š”๋ฐ.. ์ข€ ์–ด๋ ต๋‹ค.
๊ตฌ์กฐ๋Š” ํŒŒ์•…ํ•˜์˜€๋Š”๋ฐ ๋‚ด๊ฐ€ ์ด๋ถ„ ํƒ์ƒ‰์„ ์•„์ง ์ž˜ ๋ชปํ•ด์„œ ๊ทธ๋Ÿฐ๊ฐ€ ์‹ถ๊ธฐ๋„ ํ•˜๊ณ 
๊ทธ๋ž˜๋„ ์–ด๋–ค ๊ตฌ์กด์ง€๋Š” ํŒŒ์•…ํ•ด์„œ ๋งŒ์กฑ์Šค๋Ÿฌ์› ๋‹ค. ์ข€ ๋” LIS ๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณด๋ฉด์„œ ๊บ ๋‹ฌ์•„์•ผ๊ฒ ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ dp๋กœ ํ’€๋ฉด N์ด ์ปค์ง€๋ฉด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋ฐ”๋กœ ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ๊ณต๋ถ€๋ฅผ ํ•˜์˜€๋‹ค.
๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•˜๋ฉด ํ•œ์ •์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.

ํƒœ๊ทธ: , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: