내 풀이
function solution(heights) {
var answer = [];
let len = heights.length;
for (let i = len - 1; i >= 0; i--) {
let isZero = true;
for (let j = i; j >= 0; j--) {
if (heights[j] > heights[i]) {
answer.push(j + 1);
isZero = false;
break;
}
}
if (isZero) {
answer.push(0);
}
}
return answer.reverse();
}
console.log(solution([6, 9, 5, 7, 4]));
스텍 문제다보니 역순회를 실시해 자신보다 인덱스가 작은 수가 있으면 그 수의 인덱스를 넣어주고 아니면 0을 넣어줬다. isZero
라는 플레그 값을 선언해서 0을 넣어주는 작업을 하고 요구하는 대로 넣어주기 위해 마지막에 reverse()
를 실행해줬다.
먼가 더 깔끔하게 할 수 있을거 같은데 for문
을 두 번 써야하는게 마음에 들지 않는다.
다른 풀이
function solution(heights) {
return heights.map((v, i) => {
while (i) {
i--;
if (heights[i] > v) {
return i + 1;
}
}
return 0;
});
}
역시 배열을 리턴하는 것에 map
함수를 쓰는 것이 깔끔한 풀이인거 같다. map
함수와 while
을 이용해 나와 같은 작업을 수행했다. 이 편이 더 깔끔한 풀이인 느낌이다.