c언어/백준 11053

2022. 2. 6. 17:18문제풀이/백준

 

링크 : 백준 11053] C++ 가장 긴 증가하는 부분 순열 (tistory.com)

 

백준 11053] C++ 가장 긴 증가하는 부분 순열

해당 문제는 백준 사이트에서 풀 수 있습니다. www.acmicpc.net/problem/11053 1. 문제 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10,

hwan-shell.tistory.com

 

 

바로 아래 코드가 위 그림을 보고 구현한 코드이다.

for (int j = 0; j < n; j++) {
	// dp[j] = 1; <== 1로 초기화 하면 max 에 1을 더해주지 않아도 답이 잘 나오는데
	//                백준에 올리면 99%에서 틀리다고 나온다. 
	for (int k = 0; k < j; k++) {
		if (arr[j] > arr[k] && dp[k] + 1 > dp[j]) {
			dp[j] = dp[k] + 1;
		}
		if (max < dp[j]) max = dp[j];
	}
}
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<stdlib.h>


int main() {

	int dp[1002]  = { 0, };

	int n;
	int max = 0;

	scanf("%d", &n);

	int* arr = (int*)malloc(sizeof(int) * n); //동적할당시 arr의 범위는 * n이므로
						  //for문 사용시 0 ~ n - 1 까지의 인덱스만
						  //사용해야 한다.

	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}

	for (int j = 0; j < n; j++) {
		for (int k = 0; k < j; k++) {
			if (arr[j] > arr[k] && dp[k] + 1 > dp[j]) {
				dp[j] = dp[k] + 1;
			}
			if (max < dp[j]) max = dp[j];
		}
	}

	printf("%d", max + 1);
}

 

의문점 : dp[j] = 1; 로 초기화 하면 어디에서 틀리는지?

           

'문제풀이 > 백준' 카테고리의 다른 글

c언어/백준 1149  (0) 2022.02.04