문제
https://www.acmicpc.net/problem/10799
정답 코드
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
const input = fs.readFileSync(filePath).toString().trim();
function solution(input) {
const stack = [];
let result = 0;
// 레이저인지 막대기의 끝인지 구분하기 위한 변수
let prev = "";
for (let i = 0; i < input.length; i++) {
// 괄호
const parentheses = input[i];
if (parentheses === "(") {
stack.push(parentheses);
} else {
stack.pop();
// 만약 이전 괄호가 ) 이면 막대기의 마지막
if (prev === ")") {
result = result + 1;
} else {
result = result + stack.length;
}
}
prev = parentheses;
}
return result;
}
console.log(solution(input));
- "(" 가 나오면 스택에 추가
- ")" 가 나오면 스택에서 제거, 이전 문자가 "(" 이면 레이저 ")" 이면 막대기의 끝을 의미
- 이전 문자가 "(" 이면 레이저를 의미하므로 스택에 있는 개수만큼 조각 수 증가
- 이전 문자가 ")" 이면 막대기의 끝을 의미하므로 막대기 하나가 종료되므로 조각 수 1개 증가
'코딩문제풀기' 카테고리의 다른 글
[백준] 3085 | 사탕 게임 | 자바스크립트 (0) | 2025.01.10 |
---|---|
[백준] 2309 | 일곱 난쟁이 | 자바스크립트 (0) | 2025.01.08 |
[백준] 2525 | 오븐 시계 | 자바스크립트 (0) | 2025.01.03 |
[백준] 10866 | 덱 | 자바스크립트 (0) | 2024.12.30 |
[백준] 14681 | 사분면 고르기 | 자바스크립트 (0) | 2024.12.30 |