
문제에 대한 자세한 설명은 상단에 있는 문제 링크로 직접 보도록 하고 간략하게 문제를 설명하겠다.
()는 레이저이다. ( 표시는 쇠막대기 시작 지점, ) 는 쇠막대기 끝 지점이다. () 레이저로 쇠막대기가 잘린다고 했을 때, 잘려진 조각의 갯수는 모두 몇개인가.예시
()(((()())(())()))(())
잘린 조각의 갯수 : 17
stack 에 쇠막대기를 저장) 를 보고 레이저인지 확인하기 위해 isLaser 변수를 사용( 였을 경우 레이저라고 판단stack 에 있는 쇠막대 갯수 만큼 조각 생성전체 풀이
let fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().trim().split("");
let stack = [];
let isLaser = false;
let answer = 0;
for (let i = 0; i < input.length; i++) {
if (input[i] === '(') {
stack.push('(');
isLaser = true;
} else {
// 직전 값이 '(' 라면
if (isLaser) {
stack.pop();
answer += stack.length;
isLaser = false;
// 직전 값이 ')' 라면
} else {
stack.pop();
answer += 1;
}
}
}
console.log(answer);

스택을 활용한 문제였고, 직전 값을 따로 반복문 안에서 i + 1 이런식으로 계산하기 싫어서 isLaser 라는 변수를 사용했다.
그런데 제출을 했는데 체점을 하는 시간이 굉장히 오래 걸려서 혹시 틀렸나 조마조마하며 지켜지만, 결국 맞았다고 떠서 다행이었다.
체점을 완료하고 체점 현황을 node.js로 두고 확인하며 나의 풀이가 따로 코드 줄이 너무 길거나 시간, 메모리를 더 많이 쓰는 것은 아닌거까지 확인하고 나서야 안심했다.