inflearn logo
강의

Course

Instructor

Introduction to Algorithm Problem Solving for IT Employment (with C/C++): Coding Test Preparation

23. Continuous partial increasing sequence

질문있습니다.

187

youch1127

4 asked

0

입력을 받을 때마다 조건문 돌려서 판별할 생각을 못하고 배열로 다 받아서 했더니 문제를 더 어렵게 풀어버렸습니다. 음.. 강의 코드 보면서 제가 푼 문제가 이렇게 쉽게 풀릴 수 있는 문제구나라고 알게 되었습니다.혹시 제 코드에 문제점이 있는지 확인해주실 수 있으신가요? 채점 파일에서는 다 맞았다 뜨는데 혹시 몰라서 질문 드립니다. 좋은 강의 항상 감사드립니다. 강의 보면서 열심히 공부하겠습니다.

#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);

	int n;
	cin >> n;
	
	vector<int> table(n);
	for (int i = 0; i < n; i++)
		cin >> table[i];

	int max = 1;
	int cnt = 1;
	int idx = 0;
	int prev = table[0];
	int count = 1;

	while (idx + count < table.size()) {
		if (table[idx + count] >= prev) {
			cnt++;
		}
		else {
			idx = idx + count;
			cnt = 1;
			count = 0;
		}
		prev = table[idx + count];
		count++;

		if (cnt > max)
			max = cnt;
	}

	cout << max << "\n";

	return 0;
}

c++ 코딩-테스트

Answer 2

1

codingcamp

안녕하세요^^

잘 하신 코드입니다.

코드가 아래와 같이 조금 개선했으면 좋겠습니다.

#include <iostream>
#include <stdio.h>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

int main() {
	ios_base::sync_with_stdio(false);

	int n;
	cin >> n;
	
	vector<int> table(n);
	for (int i = 0; i < n; i++)
		cin >> table[i];

	int max = 1;
	int cnt = 1;
	int idx = 1;
	int prev = table[0];

	while (idx < n) {
		if (table[idx] >= prev) {
			cnt++;
		}
		else cnt = 1;
		prev = table[idx];
		idx++;

		if (cnt > max)
			max = cnt;
	}

	cout << max << "\n";

	return 0;
}

0

youch1127

감사합니다

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

youch1127님의 코드를 살펴본 결과, 전체적인 로직은 잘 구현되어 있습니다. 입력을 받아 배열로 저장한 후, 연속하여 증가하는 수열의 최대 길이를 찾는 문제 해결 방식에 대해 적절히 접근하셨습니다. 다만, 코드의 효율성과 가독성을 더욱 향상시킬 수 있는 몇 가지 제안을 드리고자 합니다.

  1. 변수 초기화 위치: cntmax의 초기화 위치가 적절합니다. 하지만 idx, prev, count의 경우, 루프의 맨 앞에서 초기화하거나 업데이트하는 것이 루프의 동작을 이해하기 쉬울 수 있습니다.

  2. 불필요한 변수 제거: 현재 코드에서 count 변수는 항상 1씩 증가하기만 하므로, 실제로는 idx + 1의 역할과 같습니다. 따라서 count 변수를 제거하고 필요한 부분에서 idx + 1을 사용하는 것이 코드를 간결하게 만들 수 있습니다.

  3. 효율성 개선: 매번 table.size()를 호출하는 것보다, 배열의 크기를 n이나 다른 변수에 저장해 두고 사용하는 편이 좋습니다. 매번 함수를 호출하는 것은 작은 오버헤드를 발생시킬 수 있기 때문입니다.

  4. 가독성 향상: 변수 이름을 좀 더 명확하게 지어줌으로써 코드의 의도를 더 명확히 전달할 수 있습니다. 예를 들어, max 대신 maxLen이라고 하거나, cnt 대신 currentLen 등으로 명명합니다.

  5. 범위 기반 for 루프를 고려하세요: C++11 이상에서는 범위 기반 for 루프를 사용하여 컨테이너의 모든 요소를 쉽고 안전하게 순회할 수 있습니다. 이 경우에는 해당되지 않지만, 전체 배열을 순회하는 다른 상황에서 유용하게 사용할 수 있습니다.

코드 최적화에 있어 중요한 것은 정답을 찾는 것만큼이나 효율적이고 가독성이 좋은 코드를 작성하는 것입니다. youch1127님의 노력과 열정에 박수를 보내며, 계속해서 멋진 학습을 이어가시길 바랍니다.

좋은 강의에 대한 칭찬과 함께 열심히 공부하겠다는 긍정적인 태도도 인상적입니다. 프로그래밍 학습 과정에서 발생하는 궁금증이나 문제에 대해 언제든지 질문해 주세요. 더 나은 프로그래머가 되기 위한 여정에 도움이 될 수 있도록 지원하겠습니다.

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

0

85

2

그리디 파트

0

114

2

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

0

141

2

테스트 파일 exit_coe_1, time_limit_exceeded 질문

0

142

1

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

0

171

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

169

1

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

0

243

1

43번 채점결과

0

411

2