[프로그래머스] 뒤에 있는 큰 수 찾기 (stack)

쿼카쿼카·2023년 3월 31일
0

알고리즘

목록 보기
47/67

코드

// 시간 초과 풀이
function solution(numbers) {
  let ans = [];

  for (let i = 0; i < numbers.length; i++) {
    if (numbers[i] >= Math.max(...numbers.slice(i + 1))) {
      ans.push(-1);
      continue;
    }

    for (let j = i + 1; j < numbers.length; j++) {
      if (numbers[i] >= numbers[j]) continue;
      else {
        ans.push(numbers[j]);
        break;
      }
    }
  }

  return ans;
}

// 스택을 이용한 풀이
function solution(numbers) {
  const ans = Array(numbers.length).fill(-1);
  const stack = [];

  for (let i = 0; i < numbers.length; i++) {
    while (stack.length && numbers[stack[stack.length - 1]] < numbers[i]) {
      ans[stack.pop()] = numbers[i];
    }
    stack.push(i);
  }

  return ans;
}

stack

  • ans = Array.fill을 이용해 -1을 채워요! 레벨 2에서는 Array(len).fill()이 자주 보이네요
  • for문을 이용해 numbers를 돌아요~
  • while문으로 하나하나 검증해요!
    • stack의 제일 바깥은 바로 이전 idx겠죠?
    • 그 수가 numbers[i]보다 작다면! ans의 위치를 pop과 함께 바꿔줘요
  • 그리고 다음을 위해 stack에 i를 푸시해줍니다!

참고 사이트

https://velog.io/@highero-k/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4-%EB%92%A4%EC%97%90-%EC%9E%88%EB%8A%94-%ED%81%B0-%EC%88%98-%EC%B0%BE%EA%B8%B0-JavaScript-Level-2

profile
쿼카에요

0개의 댓글