
KUKJIN LEE
posted 1 day ago
프로그래머스 배열 만들기 4 문제 풀이
function solution(arr) {
let stk = [];
let i = 0;
while (i < arr.length) {
const top = stk[stk.length - 1];
if (stk.length === 0 || top < arr[i]) {
stk.push(arr[i]);
i++;
} else {
stk.pop();
}
}
return stk;
}
항목 | 설명 |
---|---|
학습 포인트 | 스택 사용법, 조건문 조합, 루프 흐름 제어 |
주요 개념 | 스택의 top과 현재 값을 비교해서 조건 만족 시 push, 아니면 pop |
현실 적용 예시 | 주식 가격 분석, 증가/감소 추세 판단, 범위 내 조건 추출 |
✅ 1. 스택(Stack) 자료구조 사용법
-
스택은 "마지막에 넣은 값을 먼저 꺼낸다"는 구조(LIFO, Last-In First-Out)를 가지고 있어요.
-
push
와pop
이라는 메서드를 통해 값을 넣고 뺍니다. -
이 문제에서는 스택을 사용해서 조건에 따라 값을 유지하거나 제거하는 로직을 구현합니다.
✅ 2. 조건에 따라 스택을 구성하는 로직
-
현재 배열의 요소
arr[i]
를 스택의 가장 위에 있는 값(stk[stk.length - 1]
)과 비교합니다. -
스택이 비었거나, 스택의 top 값보다 크면 push
-
그렇지 않으면 pop — 즉, 현재 값보다 작은 값들만 남기겠다는 구조입니다.
if (stk.length === 0 || stk[stk.length - 1] < arr[i]) {
stk.push(arr[i]);
i++;
} else {
stk.pop();
}
-
조건 1: 스택이 비어 있으면 그냥 넣는다 (비교 대상이 없기 때문)
-
조건 2: 스택의 마지막 값이 현재 값보다 작으면 넣는다 (증가하는 흐름 유지)
-
그 외: 스택의 값이 현재 값보다 크면 빼고 다시 비교한다