프로그래머스 코딩테스트 - p 와 y 개수 구하기

프로그래머스 - 탑

내 풀이

    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 을 이용해 나와 같은 작업을 수행했다. 이 편이 더 깔끔한 풀이인 느낌이다.