결과 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: 값의 최고 기록을 확인하고 위치 번호를 순서대로 담아요.