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

HaJingJingยท2021๋…„ 4์›” 22์ผ
0

Algorithm

๋ชฉ๋ก ๋ณด๊ธฐ
12/119

0. ๋ฌธ์ œ

์ˆ˜์—ด A๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆ˜์—ด A = {10, 20, 10, 30, 20, 50} ์ธ ๊ฒฝ์šฐ์— ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์€ A = {10, 20, 10, 30, 20, 50} ์ด๊ณ , ๊ธธ์ด๋Š” 4์ด๋‹ค.

์ž…๋ ฅ
์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ํฌ๊ธฐ N (1 โ‰ค N โ‰ค 1,000)์ด ์ฃผ์–ด์ง„๋‹ค.
๋‘˜์งธ ์ค„์—๋Š” ์ˆ˜์—ด A๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” Ai๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 โ‰ค Ai โ‰ค 1,000)

์ถœ๋ ฅ
์ฒซ์งธ ์ค„์— ์ˆ˜์—ด A์˜ ๊ฐ€์žฅ ๊ธด ์ฆ๊ฐ€ํ•˜๋Š” ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

1. ์•„์ด๋””์–ด

์ด์ „์˜ list๊ฐ’๋ณด๋‹ค ์ปค์•ผํ•จ
์ด์ „์˜ dp๊ฐ’์ด ํ˜„์žฌ dp๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•จ

2. ํ•ต์‹ฌ ํ’€์ด

1) ์ด์ „์˜ list๊ฐ’๋ณด๋‹ค ์ปค์•ผํ•จ && ์ด์ „์˜ dp๊ฐ’์ด ํ˜„์žฌ dp๊ฐ’๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์•„์•ผํ•จ

if(lis[j]<lis[i] && dp[i] <= dp[j])
					dp[i] = dp[j] + 1;

3. ์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.InputStreamReader;
public class DP_EX_4 {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int max = -1;
		
		int n = Integer.parseInt(br.readLine());
		String s[] = br.readLine().split(" ");
		
		int lis[] = new int[n];
		int dp[] = new int[n];
		
		for(int i=0; i<n; i++)
			lis[i] = Integer.parseInt(s[i]);
		
		for(int i=0; i<n; i++) {
			dp[i] = 1;
			for(int j=0; j<i; j++) {
				if(lis[j]<lis[i] && dp[i] <= dp[j])
					dp[i] = dp[j] + 1;
			}
		}
		
		for(int i=0; i<n; i++)
			max = Math.max(max, dp[i]);
		
		System.out.println(max);
	}

}

4. ๊ฒฐ๊ณผ

์„ฑ๊ณต!

profile
๐ŸŒฑ์ดˆ๋ณด ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€