강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

hellofrontdev님의 프로필 이미지
hellofrontdev

작성한 질문수

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

23. 연속 부분 증가수열

풀이에 대한 질문 있습니다!

해결된 질문

작성

·

158

0

항상 강좌 잘 듣고 있습니다. 1년차 개발자인데 알고리즘이 너무 약하고 항상 코딩 테스트 때문에 걱정이였는데. 이렇게라도 시작할수 있고 꾸준히 공부할 수 있어서 다행이라고 생각합니다. 저 같이 알고리즘을 힘들어하는 많은 분들이 도움을 받을 수 있도록 더 많은 강의 만들어 주시면 감사하겠습니다. 늘 감사합니다.

---------------------------------------------------------

강의를 듣기에 앞서 제 스스로 채점을 해보고 강의를 듣고 있습니다. 그런데 이게 테스트 케이스 5개를 success 받아 100점이면 그래도 나름대로 괜찮은 로직을 구현했다고 볼 수 있을까요? 

처음에는 시간 제한으로 통과하지 못했지만 조금 효율적으로 고치긴 했는데 강사님처럼 깔끔?한 방법은 아닌거 같아서요!

어쩌면 비효율적일수도 있구요!

-------------------

#include <iostream>
using namespace std;
int arr[100000];

int main() {
	int i, j, k, cnt = 0, N, max = -2147000000, flag = 0;
	
	scanf("%d", &N);
	for(i = 0; i < N; i++) {
		scanf("%d", &arr[i]);
	}	
	
	for(i = 0; i < N; i++) {
		for(j = i + 1; j < N; j++) {
			cnt = 1;
			flag = 0;
			for(k = i; k < j; k++) {
				if(arr[k] > arr[k + 1]) {
					flag = 1;
					break;
				}
				cnt++;
			}
			
			if(flag == 1) break;
			if(max < cnt) max = cnt;
		}
	}

	printf("%d", max);	
	return 0;
}

--------------------------------

반복문이 3번돌아서 별루인거 같긴 합니다..

답변 1

0

김태원님의 프로필 이미지
김태원
지식공유자

감사합니다^^

스스로 코드를 짜보고 도전해보는 것은 실력을 향상시키는데 매우 중요합니다. 열심히 하는 모습 너무 좋습니다.

사실 이 문제는 2중 for문만 돌려도 100점이 나오지 않도록 하는게 목적이었습니다.   채점폴더를 수정해 올려놓도록 하겠습니다.

아래 코드처럼 2중 for문 정도로 했었으면 좋지 않았을 까 생각합니다. 

#include <iostream>
using namespace std;
int arr[100000];

int main() {
	int i, j, k, cnt = 0, N, max = -2147000000, flag = 0;
	
	scanf("%d", &N);
	for(i = 0; i < N; i++) {
		scanf("%d", &arr[i]);
	}	
	
	for(i = 0; i < N; i++) {
		cnt=1;
		for(j = i; j < N-1; j++) {
			if(arr[j]<=arr[j+1]) cnt++;
			else break;
		}
		if(cnt>max) max=cnt;
	}

	printf("%d", max);	
	return 0;
}

열심히 하시는 분이시니 머지않아  곧 실력자가 되실 겁니다.  화이팅하세요^^

hellofrontdev님의 프로필 이미지
hellofrontdev

작성한 질문수

질문하기