반응형

11053번 - 가장 긴 증가하는 부분 수열

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int N = Integer.parseInt(br.readLine());

		int[] A = new int[N]; // 수열 A
		int[] dp = new int[N]; // 각 수열의 증가부분 최대 길이

		int result = 0;
		StringTokenizer st = new StringTokenizer(br.readLine());
		for (int i = 0; i < N; i++) {
			A[i] = Integer.parseInt(st.nextToken());
		}

		for (int j = 0; j < N; j++) {
			dp[j] = 1;

			for (int k = 0; k < j; k++) {
				if (A[j] > A[k]) { // 현재 수와 이전까지의 수들 크기비교
					dp[j] = Math.max(dp[j], dp[k] + 1); // 각각의 최대크기 비교해서 가장큰값을 저장
				}
			}

		}

		for (int i = 0; i < N; i++) {
			result = Math.max(result, dp[i]);
		}

		bw.write(String.valueOf(result));
		bw.flush();
		bw.close();
	}

}

 

처음 문제에 접근한 방식

1. 각각의 수를 입력받고 이후에 큰 순자가 나올때마다 수열의 길이를 카운트함

2. ex) 1 8 2 4 6 의 경우 첫번째 1의 수열의 길이가 2로 나옴 1 -> 8  

3. 오답

 

정답을 맞춘 풀이방법

1. 각각의 수열의 최대값을 저장하는 dp배열을 선언 

2. n번째 수열의 최대 길이를 구할 경우 0 ~ n-1번째 보다 값이 크고, 저장된 dp값이 가장큰 경우를 계산해서 저장

3. 최대 길이를 출력

반응형

'알고리즘 > 백준 문제[추후 옮길예정]' 카테고리의 다른 글

[JAVA] 백준 1699번  (0) 2021.06.03
[JAVA] 백준 14002번  (0) 2021.06.02
[JAVA] 백준 16194번  (0) 2021.05.26
[JAVA] 백준 11052번  (0) 2021.05.26
[JAVA] 백준 9095번  (0) 2021.05.25

+ Recent posts