본문 바로가기

코딩 테스트/백준(java)

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

반응형

문제

www.acmicpc.net/problem/11053

 

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

수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이

www.acmicpc.net

 

잠깐만

오랜만에 이중포문을 사용합니다. 수행 및 종료타이밍을 확인하세요

 

코드

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

public class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int inputNum = Integer.parseInt(st.nextToken());
		
		int maxLength = 0;
		int[] values = new int[inputNum+1];
		int[] results = new int[inputNum+1];
		st = new StringTokenizer(br.readLine());
		for (int i = 1; i <= inputNum; i++) {
			values[i] = Integer.parseInt(st.nextToken());
			
			for (int j = i-1; j > 0; j--) {
				if (values[j] < values[i] && results[i] < results[j]) {
					results[i] = results[j];
				}
			}
			results[i] += 1;
			maxLength = Math.max(maxLength, results[i]);
		}
		System.out.print(maxLength);
	}
}

 

설명

의외로 쉬운것 같은데 어렵고 어려운것 같은데 쉬운 문제입니다.

이중 포문을 통해서, value가 자신보다 작은 녀석들 중에서, max result(연속 개수)값을 가져오는 로직입니다

 

 

회고

이중 포문에 대한 종료 시점이라고 볼수 있겠네요

반응형

'코딩 테스트 > 백준(java)' 카테고리의 다른 글

DP - 2193. 이친수  (0) 2021.03.30
DP - 2748. 피보나치 수 2  (0) 2021.03.30
DP - 2156. 포도주 시식  (0) 2021.03.29
DP - 10870. 피보나치 수 5  (0) 2021.03.28
DP - 1932. 정수 삼각형  (0) 2021.03.27