저장을 습관화
프로그래머스 LV.0 배열 만들기 6 본문
프로그래머스 LV.0 배열 만들기 6
https://school.programmers.co.kr/learn/courses/30/lessons/181859
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
1. 문제 명
배열 만들기 6
2. 문제 설명
0과 1로만 이루어진 정수 배열 arr가 주어집니다. arr를 이용해 새로운 배열 stk을 만드려고 합니다.
i의 초기값을 0으로 설정하고 i가 arr의 길이보다 작으면 다음을 반복합니다.
- 만약 stk이 빈 배열이라면 arr[i]를 stk에 추가하고 i에 1을 더합니다.
- stk에 원소가 있고, stk의 마지막 원소가 arr[i]와 같으면 stk의 마지막 원소를 stk에서 제거하고 i에 1을 더합니다.
- stk에 원소가 있는데 stk의 마지막 원소가 arr[i]와 다르면 stk의 맨 마지막에 arr[i]를 추가하고 i에 1을 더합니다.
위 작업을 마친 후 만들어진 stk을 return 하는 solution 함수를 완성해 주세요.
단, 만약 빈 배열을 return 해야한다면 [-1]을 return 합니다.
3. 제한 사항
- 1 ≤ arr의 길이 ≤ 1,000,000
- arr의 원소는 0 또는 1 입니다.
4. 예시
arr | result |
[0, 1, 1, 1, 0] | [0, 1, 0] |
[0, 1, 0, 1, 0] | [0, 1, 0, 1, 0] |
[0, 1, 1, 0] | [-1] |
5. 기본 제공 코드
function solution(arr) {
var answer = [];
return answer;
}
6. 제출한 내 답
const solution = (arr) => {
let stk = [];
for (i = 0; i < arr.length; i++) {
if (stk.length === 0) {
stk.push(arr[i]);
} else if (stk[stk.length - 1] === arr[i]) {
stk.pop();
} else {
stk.push(arr[i]);
}
}
return stk.length === 0 ? [-1] : stk;
};
6-2. VSC에 작성한 내용
const solution = (arr) => {
let stk = [];
// i의 초기값은 0
// i가 arr의 길이보다 작으면 다음 작업 반복
// 1. stk가 빈 배열이라면
// arr[i]를 stk에 추가하고 i++
// 2. stk에 원소가 있고
// stk의 마지막 원소가 arr[i]와 같다면
// stk의 마지막 원소를 stk에서 제거, i++
// 3. stk에 원소가 있고
// stk의 마지막 원소가 arr[i]와 다르다면
// stk의 맨 마지막에 arr[i]를 추가, i++
// 작업 이후 빈 배열이 나온다면 [-1]을 리턴
for (i = 0; i < arr.length; i++) {
if (stk.length === 0) {
stk.push(arr[i]);
} else if (stk[stk.length - 1] === arr[i]) {
stk.pop();
} else {
stk.push(arr[i]);
}
}
return stk.length === 0 ? [-1] : stk;
};
// 테스트
console.log(solution([0, 1, 1, 1, 0]));
console.log(solution([0, 1, 0, 1, 0]));
console.log(solution([0, 1, 1, 0]));
7. 특이사항
없음
8. 다른 사람이 작성한 답
8-1. 좋아요를 가장 많이 받은 풀이법, forEach
function solution(arr) {
let stk = []
arr.forEach((x,i)=>{
if( x !== stk[stk.length - 1]){
stk.push(x)
}else{
stk.splice(-1)
}
//console.log("배열 추가 삭제 진행과정 : ",stk)
})
if(stk.length == 0){
stk = [-1]
}
return stk;
}
'코딩 테스트 > 프로그래머스 - 자바스크립트' 카테고리의 다른 글
프로그래머스 LV.1 직사각형 별찍기 (0) | 2023.10.01 |
---|---|
프로그래머스 LV.0 삼각형의 완성조건 (2) (0) | 2023.10.01 |
프로그래머스 LV.0 왼쪽 오른쪽 (0) | 2023.09.30 |
프로그래머스 LV.1 행렬의 덧셈 (0) | 2023.09.30 |
프로그래머스 LV.0 구슬을 나누는 경우의 수 (0) | 2023.09.30 |