문제
정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk를 만드려고 합니다.
변수 i를 만들어 초기값을 0으로 설정한 후 i가 arr의 길이보다 작으면 다음 작업을 반복합니다.
- 만약 stk가 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]보다 작으면 arr[i]를 stk의 뒤에 추가하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]보다 크거나 같으면 stk의 마지막 원소를 stk에서 제거합니다.
위 작업을 마친 후 만들어진 stk를 return 하는 solution 함수를 완성해 주세요.
고민한 점
새로운 배열 stk을 어떻게 선언해 줄지, 어떻게 반복 작업을 해줄 지 고민했습니다.
for문을 통해 루프를 돌고 if문을 통해 조건에 따른 작업을 해주려고 했습니다.
해결 과정
처음 작성한 코드는 이렇습니다.
function solution(arr) {
const stk = []
const lastElement = stk.length -1
for (let i =0; i < arr.length;) {
if (stk === []) {
stk.push(arr[i]); i += 1;
} elseif (stk !== [] ) && stk[lastElement] < arr[i] {
stk.push(arr[i]); i += 1;
} elseif (stk !== [] ) && stk[lastElement] >= arr[i] { stk.pop(lastElement)
}
} return stk;
}
하지만 해당 코드에는 여러 문제점이 있었습니다.
첫 번째로, stk가 빈 배열일 경우를 조건으로 한 if 문에서 조건문 stk ===[]이 잘못 되었습니다.
- 자바스크립트에서 배열끼리의 비교는 “내용”이 아니라 “참조(주소)”를 비교합니다.
- stk는 const stk = []로 한 번 만들었고, 그 이후에 []라는 "새 배열 리터럴"은 다른 객체입니다.
- 그래서 stk === [] 는 항상 false 입니다.
배열이 비어있는지 확인하기 위해서는 stk.length === 0 이라는 조건문을 거는 것이 적절합니다.
두 번째로, 자바스크립트에서는 else if 라고 적어줘야 하고 조건 전체는 괄호 하나로 묶어야 합니다.
else if (stk.length !== 0 && stk[lastIndex] < arr[i]) {}
세 번째로, stk를 처음에 빈 배열로 뒀기 때문에 lastElement는 0 -1로 항상 -1이 됩니다.
마지막으로, pop() 메서드는 인자를 받지 않고 그냥 마지막 요소를 제거하는 메서드입니다.
수정 코드
function solution(arr) {
const stk = []
for (let i =0; i < arr.length;) {
const lastIndex = stk.length -1;
if (stk.length === 0) {
stk.push(arr[i]);
i += 1;
} else if (stk[lastIndex] < arr[i]) {
stk.push(arr[i]);
i += 1;
} else {
stk.pop();
}
}
return stk;
최종 결과 및 느낀 점
익숙하다고 생각한 메서드나 세부 문법도 헷갈려하는 경우가 있다는 것을 깨달았습니다. 좀 더 문법에 대해 익숙해질 필요가 있음을 깨달았습니다.
배열 끼리 비교시 내용이 아닌 참조(주소)를 비교한다는 것을 깨달았습니다.
'코딩 테스트 공부' 카테고리의 다른 글
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 가까운 1 찾기 & 첫 번째로 나오는 음수 (0) | 2025.12.26 |
|---|---|
| 프로그래머스 자바스크립 코딩 기초 트레이닝 - 접미사 배열 (0) | 2025.12.17 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 배열 만들기2 (0) | 2025.12.08 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 원소들의 곱과 합 (0) | 2025.12.04 |
| 프로그래머스 자바스크립트 코딩 기초 트레이닝 - 문자열 곱하기 (0) | 2025.10.29 |