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
을 반환하는 solution
함수를 완성해 주세요. 단, 만약 빈 배열을 반환해야 한다면 [-1]
을 반환합니다.
arr
의 길이 ≤ 1,000,000arr
의 원소는 0 또는 1입니다.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] |
입출력 예 #1
각 작업을 마친 후에 배열의 변화를 나타내면 다음과 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 1 | [0, 1] |
3 | 1 | [0] |
4 | 0 | [0, 1] |
5 | - | [0, 1, 0] |
따라서 [0, 1, 0]을 반환합니다.
입출력 예 #2
각 작업을 마친 후에 배열의 변화를 나타내면 다음과 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 0 | [0, 1] |
3 | 1 | [0, 1, 0] |
4 | 0 | [0, 1, 0, 1] |
5 | - | [0, 1, 0, 1, 0] |
따라서 [0, 1, 0, 1, 0]을 반환합니다.
입출력 예 #3
각 작업을 마친 후에 배열의 변화를 나타내면 다음과 같습니다.
idx | arr[idx] | stk |
---|---|---|
0 | 0 | [] |
1 | 1 | [0] |
2 | 1 | [0, 1] |
3 | 0 | [0] |
4 | - | [] |
마지막에 빈 배열이 되었으므로 [-1]을 반환합니다.
아래는 주어진 조건에 따라 stk
배열을 구성하고, 빈 배열일 경우 [-1]
을 반환하는 solution
함수입니다.
function solution(arr) {
var answer = [];
let stk = [];
for (let 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]);
}
}
answer = stk;
if (answer.length === 0) {
return [-1];
} else {
return answer;
}
}
stk
배열을 빈 배열로 초기화합니다.arr
를 순회하면서 조건에 따라 stk
배열을 수정합니다.stk
이 빈 배열이면 arr[i]
를 stk
에 추가합니다.stk
의 마지막 원소가 arr[i]
와 같으면 stk
의 마지막 원소를 제거합니다.stk
의 마지막 원소가 arr[i]
와 다르면 arr[i]
를 stk
에 추가합니다.stk
배열이 빈 배열이면 [-1]
을 반환하고, 그렇지 않으면 stk
배열을 반환합니다.이 코드는 주어진 조건에 따라 배열을 적절히 수정하여 결과를 반환합니다. 배열이 빈 배열일 경우 [-1]
을 반환하는 로직을 포함하고 있습니다.
[-1]
을 반환합니다.조건문에서 불필요한 중복을 제거하여 코드를 간결하게 만들겠습니다.
function solution(arr) {
let stk = [];
for (let i = 0; i < arr.length; i++) {
if (stk.length === 0 || stk[stk.length - 1] !== arr[i]) {
stk.push(arr[i]);
} else {
stk.pop();
}
}
return stk.length === 0 ? [-1] : stk;
}
stk
배열을 빈 배열로 초기화합니다.arr
를 순회하면서 조건에 따라 stk
배열을 수정합니다.stk
이 빈 배열이거나 stk
의 마지막 원소가 arr[i]
와 다르면 stk
에 arr[i]
를 추가합니다.stk
의 마지막 원소를 제거합니다.stk
배열이 빈 배열이면 [-1]
을 반환하고, 그렇지 않으면 stk
배열을 반환합니다.코드를 간결하게 만들고, 가독성을 높이기 위해 삼항 연산자를 사용하여 결과를 반환하는 방법도 좋은 선택입니다.
function solution(arr) {
let stk = [];
for (let i = 0; i < arr.length; i++) {
if (stk.length === 0 || stk[stk.length - 1] !== arr[i]) {
stk.push(arr[i]);
} else {
stk.pop();
}
}
return stk.length === 0 ? [-1] : stk;
}
stk
배열을 빈 배열로 초기화합니다.arr
를 순회하면서 조건에 따라 stk
배열을 수정합니다.stk
이 빈 배열이거나 stk
의 마지막 원소가 arr[i]
와 다르면 stk
에 arr[i]
를 추가합니다.stk
의 마지막 원소를 제거합니다.stk
배열이 빈 배열이면 [-1]
을 반환하고, 그렇지 않으면 stk
배열을 반환합니다.당신의 코드는 문제의 요구사항을 정확히 충족하며, 효율적으로 작성되었습니다. 조건문에서 불필요한 중복을 제거하여 코드를 간결하게 만들면 더 좋습니다. 모범 답안은 가독성과 효율성을 고려하여 작성된 코드로, 유사한 문제를 해결할 때 참조할 수 있습니다.