[์ธํ๋ฐ/๋ค์ด๋๋ฏน(LIS)/์ต๋ ๋ถ๋ถ ์ฆ๊ฐ์์ด]
<<ํ์ด>>
์ฐ์ ์ด ๋ฌธ์ ๋ 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๋ฌธ์ด์ง๋ง ํ๋๋ ++์ผ๋์ด๊ณ ๋ด๋ถ๋ --์ด๋ค. ์ด๋ฌํ ์๊ฐ์ด ์ด๋ ค์ด ๊ฒ์ ์๋์ง๋ง ๋ ์ค๋ฅด๋ ๊ฒ ์ญ์ ์ต์ํ์ง ์์ผ๋ฉด ํ๋ค๋ค. ๊พธ์คํ ๊ณต๋ถํด์ ์ด๋ฌํ ๊ฒ๋ ์ ์ฐํ๊ฒ ๋ค๋ฃฐ ์ ์๊ฒ ํด๋ณด์ !!
'์ฝ๋ฉํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ/LIS/๊ฐ์ฅ ๋์ ํ ์๊ธฐ] (1) | 2024.09.08 |
---|---|
[์ธํ๋ฐ/DFS/์ฌ๋๋ผ ์์ผ๋๋] (5) | 2024.09.01 |
[์ธํ๋ฐ/BFS/12.ํ ๋งํ ] (1) | 2024.05.19 |
[์ธํ๋ฐ/greedy/๊ฒฐํผ์] (0) | 2024.04.17 |
[๋ฐฑ์ค/1018/๊ตฌํ/์ฒด์คํ ๋ค์ ์น ํ๊ธฐ] (1) | 2024.04.11 |
๋๊ธ