반응형
1. 문제
- 배열 arr이 주어질 때, 0번 인덱스 부터 오른쪽에 위치한 값들 중 제일 높은 값으로 바꾸어 반환하라.
- 마지막 요소는 -1로 채운다.
2. 해결
function replaceElements(arr: number[]): number[] {
if(arr.length === 1) { // 요소가 1개만 있는 경우 -1로 채우고 반환.
arr[arr.length-1] = -1;
return arr;
}
let max = 0; // 최대값 저장.
for(let i = arr.length - 1; i >= 0; i--) { // 뒤에서 부터 반복.
if(i === arr.length - 1) { // 마지막 요소는 max를 업데이트하고 -1로 업데이트.
max = arr[i];
arr[i] = -1;
continue;
}
const originEl = arr[i] // 원래 값을 저장해두고
arr[i] = max; // 지나온 곳의 max 값을 저장.
if(originEl > max) max = originEl; // 원래 값과 max를 비교하여 업데이트.
}
return arr;
};
- 앞에서 부터 반복하면 비교 대상을 줄여나가야 하지만, 뒤에서 부터 반복하면 비교 대상을 늘려나갈 수 있다.
- max를 이용해서 현재 요소와 max값만 비교하면 제일 큰 값을 찾을 수 있다. 앞에서 부터 하면 오른쪽의 모든 요소를 다 탐색 후 max 값을 찾아나가야 한다.