inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

it 취업을 위한 알고리즘 문제풀이 입문 (with C/C++) : 코딩테스트 대비

4. 최대 부분 증가수열(LIS : Longest Increasing Subsequence)

C언어로 코드를 짜면 채점 시에 한 문제 빼고 시간 초과가 발생하는데 해결하는 방법이 있을까요?

171

이미솔

작성한 질문수 2

0

#include <stdio.h>
#include <stdlib.h>

int main(){
	int n, res=0;
	scanf("%d", &n);
	
	int* arr = (int*)malloc(n+1);
	int* dy = (int*)malloc(n+1);
	for(int i=1; i<=n; i++){
		scanf("%d", &arr[i]);
	}
	
	dy[1] = 1;
	
	for(int i=2; i<=n; i++){
		int max=0;
		for(int j=i-1; j>=1; j--){
			if(arr[j]<arr[i] && dy[j]>max){
				max = dy[j];
			}
		}
		dy[i] = max + 1;
		
		if(dy[i]>res){
			res = dy[i];
		}
	}
	printf("%d\n", res);
	
	return 0; 
}

이런 식으로 C로 코드를 짰습니다.

시간 초과 문제를 해결할 수 있는 방법이 있을까요?

c++ 코딩-테스트 c

답변 1

0

김태원

안녕하세요^^

배열을 동적으로 선언한 부분에서 문제가 있는 것 같습니다. 아래와 같이 선언해보세요.

int *arr = (int*)malloc(sizeof(int) * (n+1));
int *dy = (int*)malloc(sizeof(int) * (n+1));

아니면 아래와 같이 해도 동적으로 됩니다.

int arr[n+1];
int dy[n+1];

 

 

87번 채점 프로그램에 오류가 있는 것 같습니다.

0

85

2

그리디 파트

0

114

2

안녕하세요. 선생님(54번 코드 관련 문의)

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

142

1

19번 질문있습니다

0

121

1

6번 관련 채점오류입니다

0

87

2

22번 문제는 C로 풀어주신 건가요 C++로 풀어주신 건가요?

0

164

2

dev C++ 콘솔창 바로 닫힘

0

245

1

최신화하기

0

170

1

채점이 안되요...

1

260

1

안녕하세요 강사님 정렬에 대해서 설명이 조금 더 듣고 싶습니다.

0

113

1

45번 공주구하기 문제를 list를 이용해서 이렇게 풀어도 될까요?

0

155

1

39번 두 배열 합치기 문제 채점 오류인가 코드 오류인가

0

153

0

채점기에서 틀렸다고 나오는데 이유를 모르겠습니다.

0

148

2

해당 강의에서 C언어로만 진행하는 강의 문의 건

0

143

2

87번 문제 섬나라 아일랜드 질문

0

128

1

16번 문제에서 직접 답을 대입하면 정답이 나오는데 채점에서 wrong answer가 나옵니다.

0

148

1

40번 교집합 문제

0

166

1

43번 뮤직비디오 문제 테스트케이스 4번을 만족 못합니다.

0

168

1

41. 연속된 자연수의 합 문제 질문있습니다.

0

160

1

질문있습니다.

0

187

2

시간초과가 나요

0

169

1

43번 문제 3 ~ 5번에 문제가 있는것 같습니다.

0

243

1

43번 채점결과

0

411

2