05-17 00:03
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[Algorithm]์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฐ”_74 ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด :: DynamicProgramming ๋ณธ๋ฌธ

Algorithm/Java

[Algorithm]์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ž๋ฐ”_74 ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด :: DynamicProgramming

miinsun 2022. 3. 12. 02:11

 

๐Ÿ’ฌ ๋ฌธ์ œ ์„ค๋ช…

N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ,
๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”(์ž‘์€ ์ˆ˜์—์„œ ํฐ ์ˆ˜๋กœ) ์›์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ.

์˜ˆ๋ฅผ ๋“ค์–ด, ์›์†Œ๊ฐ€ 2, 7, 5, 8, 6, 4, 7, 12, 3 ์ด๋ฉด
๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋„๋ก ์›์†Œ๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋ฉด 2, 5, 6, 7, 12๋ฅผ ๋ฝ‘์•„๋‚ด์–ด ๊ธธ์ด๊ฐ€ 5์ธ ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ”จ ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ์งธ ์ค„์€ ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ˆ˜ N(3≤N≤1,000, ์ž์—ฐ์ˆ˜)๋ฅผ ์˜๋ฏธํ•˜๊ณ ,
  • ๋‘˜์งธ ์ค„์€ N๊ฐœ์˜ ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋“ค์ด ์ฃผ์–ด์ง„๋‹ค.
8
5 3 7 8 6 2 9 4

 

์ถœ๋ ฅ

  • ์ฒซ ๋ฒˆ์งธ ์ค„์— ๋ถ€๋ถ„์ฆ๊ฐ€์ˆ˜์—ด์˜ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
 
4

 

 

โ€‹

๐Ÿ’ป Solution.java

  • dy[i]์—๋Š” arr[i]๋ณด๋”” ๊ฐ’์ด ์ž‘์œผ๋ฉด์„œ max๊ฐ’์ด ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์„ ํƒํ•œ๋‹ค.
  • ์„ ํƒ๋œ ๊ฐ’์—์„œ ๋ณธ์ธ์„ ํฌํ•จํ•ด dy[i]๋ฅผ max + 1๋กœ ์ €์žฅํ•ด์ค€๋‹ค
  • ๋ชจ๋“  dy์ค‘์—์„œ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์ •๋‹ต์ด ๋œ๋‹ค.
/* ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜   :: Dynamic Programming */
import java.util.*;

public class Main {
	static int [] dy;

	public 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 main = new Main();
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();	
		int[] arr = new int[n];
		
		for(int i = 0; i < n; i++) {
			arr[i] = sc.nextInt();
		}
		
		System.out.println(main.solution(arr));
		sc.close();
		return ;
	}
}

 

 

Comments