[백준 10799] 쇠막대기 with node.js
📌 문제
https://www.acmicpc.net/problem/10799
📌 풀이
괄호 모양을 보자마자 이건 스택
이다 라는 생각과 함께 문제를 접하였다. 로직은 별거 없다.
1. 우선 괄호가 '('가 나오면 스택에 추가한다.
2. 그리고 닫는 괄호 ')' 가 나오면 두가지 경우가 생긴다.
1) 레이저가 되어 모든 막대기를 다 자르는 경우
이럴 때에는 스택에 쌓은 '('의 개수 만큼 쇠막대기가 잘리기 때문에 스택의 길이만큼 쇠막대기 개수에 더해준다.
2) 막대기의 끝 부분이라 막대기 1개가 더 생기는 경우
이 경우는 쇠막대기 개수에 +1을 더해주면 된다.
📌 코드
const fs = require("fs");
const stdin = (
process.platform === "linux"
? fs.readFileSync("/dev/stdin").toString().trim()
: `(((()(()()))(())()))(()())`
).split("\n");
const input = (() => {
let line = 0;
return () => stdin[line++];
})();
const brackets = input().split("");
const stack = [];
let stickCnt = 0;
for (let i = 0; i < brackets.length; i++) {
if (brackets[i] === "(") {
stack.push(brackets[i]);
} else {
stack.pop();
if (brackets[i - 1] === "(") {
stickCnt += stack.length;
} else {
stickCnt += 1;
}
}
}
console.log(stickCnt);
📌 느낀점
문제를 처음 보았을 때 분명 스택인데.. 스택인데..? 어떻게 풀어야하지? 싶었다.
그림으로 스택을 그려서 ')'가 나왔을 때 어떤식으로 진행되는지를 파악하니 푸는 방법이 떠올랐다. 문제푸는 시간은 오래걸리지 않았지만 생각만으로도 1시간을 썼다.. 더 노력해야지!
나는 그래프 형식 말고는 다른 알고리즘 모두 새롭고 어렵기 때문에 자주 보고 익숙해져야겠다는 생각이 더욱 들었다. 매일매일 깨달음이 있다니..
Author And Source
이 문제에 관하여([백준 10799] 쇠막대기 with node.js), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hsk10271/백준-10799-쇠막대기-with-node.js저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)