← 학습 코스

새 기록이 나온 위치

C++완성형

결과 vector에 필요한 위치만 담아요

앞 레슨에서는 조건에 맞는 개수만 반환했어요. 이번에는 어느 위치였는지도 반환해요. 빈 결과는 vector<int> result;로 만들고, result.push_back(i);로 끝에 위치 번호를 붙여요.

값이 {3,1,5}일 때 첫 값은 인덱스 0의 3이에요. 기록을 갱신한 인덱스를 담는다면 결과에는 값 3·5가 아니라 번호 0·2를 담아요.

이전 기록보다 커야 새 기록이에요

i 값 이 값 전까지 최고 새 기록인가요?
0 3 없음 첫 기록
1 1 3 아니요
2 5 3 예
3 5 5 아니요

마지막 5는 기존 기록과 같으므로 추가하지 않아요. 다음 값이 6이면 어떤 번호를 담을까요? 새 값의 위치 4예요. 빈 입력에는 첫 기록도 없으니 첫 원소를 읽기 전에 길이를 확인해요.

직접 풀어봐요

values를 처음부터 읽으며, 이전의 모든 값보다 큰 값이 나온 인덱스들을 원래 순서로 반환해요. 첫 원소는 항상 첫 기록으로 포함하고, 같은 값은 새 기록이 아니에요. 빈 vector는 빈 vector를 반환해요.

길이는 0100, 원소는 −10001000이에요. 실행용 입력은 첫 줄 n, 다음 줄 n개 값이에요. 출력은 반환 인덱스를 공백으로 구분한 한 줄이에요. 빈 결과는 빈 줄이에요. 하네스가 이 출력을 처리해요.

예시 1: values={4,2,6,6,9} → [0,2,4]. 첫 기록 0 뒤에 더 큰 값이 나온 2·4를 담아요. 예시 2: values={8,7,6} → [0]. 첫 값 뒤에는 더 큰 값이 없어요.

예시 입력

5
4 2 6 6 9

예상 결과

0 2 4

예시 입력

3
8 7 6

예상 결과

0
핵심 개념
  • stl-vector: 값의 최고 기록을 확인하고 위치 번호를 순서대로 담아요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기