문제링크
문제풀이
설명을 어떻게 해야할지..
이 문제를 왜 스택으로 접근했냐하면, 괄호를 보기만 하면 스택으로 생각하게 되네요.
- 열린괄호는 쇠 막대기가 들어옴을 의미한다. 그래서 count++ 한다. 그리고 stack에 저장한다.
- 레이저를 만나면 쇠막대기가 등분된다. 이때 현재 stack의 length가 막대기의 갯수를 의미한다. 예를 들어 3개가 들어있을 경우 레이저를 만난다면 6개로 나누어진다! 그러므로 막대기의 갯수를 += 해주면 된다.
- 여기서 나는 razerCheck 라는 변수를 선언해서 열린괄호 다음에 닫힌 괄호가 나오는 것을 바로 레이저라고 생각하기로 했다.
- 또한 지금의 로직은 열린괄호일때 무조건 count+=1 을 해주는데 레이저 일때는 count--를 한다.
const fs = require("fs");
BOJkey = 0;
let input = fs
.readFileSync(BOJkey ? "./자바스크립트로/10799/input.txt" : "./dev/stdin")
.toString()
.trim();
// console.log(input);
let stack = [];
let count = 0;
let razerCheck = true;
for (let i = 0; i < input.length; i++) {
if (input[i] == "(") {
stack.push("(");
razerCheck = true;
count++;
} else {
if (razerCheck) {
count--;
count += stack.length - 1;
}
stack.pop();
razerCheck = false;
}
}
console.log(count);
'공부기록 > 자바스크립트 코딩테스트' 카테고리의 다른 글
자바스크립트 중괄호 괄호의 기능 (0) | 2022.06.30 |
---|---|
[백준/JS] 1966 프린터큐 (0) | 2022.06.29 |
[백준/JS] 1935 후위표기식2 (0) | 2022.06.29 |
중위표기법 후위표기법 변환 (0) | 2022.06.29 |
[백준/JS] 1874 스택 수열 (0) | 2022.06.29 |