
https://www.acmicpc.net/problem/10773
문제 자체는 어렵지 않다 !
스택을 하나 만들어서 새로 추가할 값이 0이면 pop하고, 0이 아니라면 그 값을 push하면 된다.
다만, readline으로 입력값을 받아오면 항상 문자열이기 때문에 숫자로 형변환이 필요하다.
- Number()
- pasrseInt()
이 때 숫자로 형변환을 하는 방법은 두가지가 있다.
두가지 방법의 차이점이 무엇이냐 !!
Number()는 값을 바꾸지 않고 타입만 숫자로 변환하고,
parseInt()는 소수점이 있다면 내림처리하여 정수로 바꾸고 숫자로 변환한다.
console.log(Number(1.5));
console.log(parseInt(1.5));
이 코드를 실행해보면

결과값이 이렇게 나온다 !!
Int가 정수형을 나타내는 것임을 생각하면 쉽게 구분할 수 있다.
상황에 따라 잘 골라서 사용하면 된다ㅎㅎ
function solution(array) {
const stack = [];
for (let i in array) {
if (array[i] == 0) {
stack.pop();
} else {
stack.push(array[i]);
}
}
let sum = 0;
for (let i = 0; i < stack.length; i++) {
sum += Number(stack[i]);
}
return sum;
}
console.log(Number(1.5));
console.log(parseInt(1.5));
// =====입출력=====
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", (line) => {
input.push(line);
if (input.length === parseInt(input[0]) + 1) {
rl.close();
}
}).on("close", () => {
const count = parseInt(input[0]);
const array = input.slice(1, count + 1);
console.log(solution(array));
});
근데 저번 문제를 풀면서 작성했던 입출력 코드를 재사용하다보니 입력값을 문자열로 처리하고 있었다..

처음부터 숫자로 입력받으면 좀 더 효율적일 것 같다 !!
function solution(array) {
const stack = [];
for (let i in array) {
if (array[i] == 0) {
stack.pop();
} else {
stack.push(array[i]);
}
}
let sum = 0;
for (let i = 0; i < stack.length; i++) {
sum += stack[i];
}
return sum;
}
// =====입출력=====
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", (line) => {
if (input.length === 0) {
input.push(Number(line));
} else {
input.push(Number(line));
}
if (input.length === input[0] + 1) {
rl.close();
}
}).on("close", () => {
const count = input[0];
const array = input.slice(1);
console.log(solution(array));
});

메모리나 시간 면에서 차이가 크지 않아서 문제 상황에 따라 더 적절한 방법을 선택하면 좋을듯 !!