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

한유태님의 프로필 이미지

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

2-T

2-T 질문있습니다 :)

해결된 질문

24.06.25 00:34 작성

·

87

·

수정됨

0

안녕하세요 선생님 🙂

선생님께서 알려주신대로 무식하게 풀 수 있는 방법부터 생각하는건 되기 시작했는데요, 아직 시간복잡도까지 고려하는 수준은 아닌가 봅니다 ㅠㅠ

 

강의를 듣고 아래의 방식의 시간복잡도가 굉장히 커진다는 것은 이해를 했습니다. 그래도 출력 값이 정답이라고 생각을 했는데요, 디버깅을 해보니 2중 for문을 사용하는 부분에서 i가 1인 경우를 인식하지 못하고 바로 i가 2인 경우로 넘어가지더라구요. 그러다보니 첫 번째 테스트케이스는 올바른 답으로 출력이 되지만, 두 번째 테스트케이스는 오답이 나오고 있습니다. 한참을 봐도 제가 무엇을 실수한건지 잘 모르겠습니다..ㅠ 조언 부탁 드립니다 :)

 

https://www.acmicpc.net/source/share/65830377ec624e879c48d979af5762d4

답변 1

1

큰돌님의 프로필 이미지
큰돌
지식공유자

2024. 06. 25. 09:31

안녕하세요 유태님 ㅎㅎ

	for (int i = 1; i <= N; i++)
	{
		result[i] = arr[i];

		for (int j = i; j <= N; j++)

이 로직 전에 처음 result를 -1로 초기화를 해야합니다.

 

		for (int j = i; j <= N; j++)
		{
			temp[j] = max(arr[j], arr[j + 1]);
			
			if (result[i] < temp[j])
			{
				result[i] = temp[j];
				break;
			}
			else result[i] = -1;

오큰수란 의미에 맞게 그보다 큰수를 발견하면 그 즉시 그 값으로 설정하고 종료를 해야 합니다.

 

즉, temp (배열 안써도 됩니다.)에 지금의 값 arr[i]를 걸어놓고 그 다음 j부터 찾으면서 큰값 찾으면 result에 값을 할당하고 break;를 걸어야 합니다.

temp = arr[i]

for j = i + 1 ...

이런식으로 구축이 되어야 합니다.

 

이렇게 해보시겠어요?



또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림.


한유태님의 프로필 이미지
한유태
질문자

2024. 06. 25. 16:33

로직이 조금 어긋났었던거였군요! 감사합니다 :)