728x90
[Silver 4] 10773 제로
구분
알고리즘 > 구현
풀이 요약
주어진 숫자 배열에서 0이 나오면 이전에 추가된 숫자를 제거하고, 남은 숫자들의 합을 계산하는 문제
나의 풀이
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\\n")
.map(Number);
const K = input.shift();
const arr = [...input].map(Number);
const num = [];
for (let i = 0; i < K; i++) {
if (arr[i] !== 0) {
num.push(arr[i]);
}
if (arr[i] === 0) {
num.push(arr[i]);
num.pop(arr[i]);
num.pop(arr[i - 1]);
}
}
if (num.length == 0) {
console.log(0);
} else {
console.log(num.reduce((a, b) => a + b));
}
배운점
문제를 풀 때 원하는 답이 출력이 안되서 stack을 떠올려서 풀었습니다. 주의할 점은 숫자 0을 만나면 0과 함께 이전 숫자를 지워야 합니다.
또한 reduce의 누적합을 활용하여 num의 값을 모두 더해 반환했습니다.
문제를 풀고나서 num과 arr을 따로 설정할 것이 아니라 input으로 모든 입력값을 가져오면서 for문의 범위를 설정해주면 중복되고
불필요한 코드가 줄어들었을 거라는 생각이 들었고 아래와 같이 고쳐보았습니다.
const input = require("fs")
.readFileSync("./input.txt")
.toString()
.trim()
.split("\\n")
.map(Number);
const K = input[0];
const num = [];
for (let i = 1; i <= K; i++) {
if (input[i] === 0) {
num.pop();
} else {
num.push(input[i]);
}
}
console.log(num.reduce((a, b) => a + b));
728x90
'코테 > 백준' 카테고리의 다른 글
[백준] 1920 수 찾기 (0) | 2024.11.03 |
---|---|
[백준] 1018 체스판 다시 칠하기 (0) | 2024.10.27 |
[백준] 10448 유레카 이론 (0) | 2024.10.27 |
[백준] 1676 팩토리얼 0의 개수 (0) | 2024.10.17 |
[백준] 17269 이름궁합 테스트 (0) | 2024.10.17 |