프론트엔드 개발자의 기록 공간

[백준 node.js] 10773번_제로 본문

알고리즘_JS/백준_문자열

[백준 node.js] 10773번_제로

[리우] 2021. 1. 7. 01:29

백준 문자열 알고리즘 10773번_제로

난이도 : 실버IV

 

문제 설명

입출력

 

문제 풀이 : input값 순서대로 계산을 해주다가 0이 나오면 마지막에 불렀던 숫자를 빼주면된다.

0이 여러개 나오게 되면 마지막에 불렀던 순으로 올라가면서 값을 빼줘야한다.

즉 마지막에 불렸던 숫자를 빼야하는데 이는 스택을 활용하면 쉽게 구현할 수 있다.

반복문을 통해 값을 체크한뒤 0이 아니라면 스택에 넣어주고 합산을 해주고

0이라면 스택에서 마지막 값을 빼주면된다.

 

//실버4 제로
const solution = (n) => {
  let sum = 0; //총합
  let tmp = []; //스택으로 활용
  for (let i = 0; i < n; i++) {
    //불러주는 수가 0이 아니라면
    //스택에 넣고 총합계산
    if (input[i]) {
      tmp.push(input[i]);
      sum += input[i];
    } else {
      //0이라면 계산을 잘못한거기 때문에
      //제일 마지막에 불렀던 숫자를 빼줘야하기 떄문에
      //pop() 이용
      sum -= tmp.pop();
    }
  }
  console.log(sum);
};

const readline = require("readline");
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
});

let input = [];
rl.on("line", function (line) {
  //여러줄 입력
  input.push(line);
}).on("close", function () {
  //input값 형변환
  input = input.map((el) => Number(el));
  let n = input.shift();
  solution(n);
  process.exit();
});

 

* 매우 간단해 보이지만 이정도 수준의 문제가 코딩테스트 1번 문제정도로 나오는 경우가 있다. 몸풀기 용으로 풀어두면 좋을 것 같다.

728x90
Comments