728x90
문제
https://www.acmicpc.net/problem/2504
풀이
문제는 기본적으로 스택 문제이지만, 중간에 숫자를 계산한다는 점이 좀 걸리는 문제이다...
숫자 계산 로직의 경우 조금 근본적으로 접근했다. ( 나 [ 가 stack에 들어오는 경우 그 안에 있는 숫자들이 2 또는 3 만큼 곱해져 결과값에 더해진다는 특징을 이용해 temp변수에 괄호의 깊이에 따른 값을 정의했으며, 완벽한 괄호가 완성된 경우 그 깊이에 따른 값을 더해주면 값을 도출했다.
코드
const input = require("fs")
.readFileSync(
process.platform === "linux" ? "/dev/stdin" : __dirname + "/example.txt"
)
.toString()
.trim()
.split("\n");
let st = input.shift().split("");
let stack = [];
let temp = 1;
let answer = 0;
let flag = true;
for (let i = 0; i < st.length; i++) {
const s = st[i];
if (s === "(" || s === "[") {
stack.push(s);
temp *= s === "(" ? 2 : 3;
} else if (s === ")") {
if (stack.length === 0 || stack[stack.length - 1] !== "(") {
flag = false;
break;
} else if (st[i - 1] === "(") {
answer += temp;
}
stack.pop();
temp /= 2;
} else if (s === "]") {
if (stack.length === 0 || stack[stack.length - 1] !== "[") {
flag = false;
break;
} else if (st[i - 1] === "[") {
answer += temp;
}
stack.pop();
temp /= 3;
}
}
console.log(stack.length > 0 || !flag ? 0 : answer);
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[JS] 4659_비밀번호 발음하기 (0) | 2025.04.08 |
---|---|
[JS]1956_운동 (0) | 2025.04.04 |
[JS] 2941_크로아티아 알파벳 (0) | 2025.03.20 |
[JS] 1976_여행 가자 (0) | 2025.03.18 |
[JS] 8979_올림픽 (0) | 2025.03.15 |
728x90
문제
https://www.acmicpc.net/problem/2504
풀이
문제는 기본적으로 스택 문제이지만, 중간에 숫자를 계산한다는 점이 좀 걸리는 문제이다...
숫자 계산 로직의 경우 조금 근본적으로 접근했다. ( 나 [ 가 stack에 들어오는 경우 그 안에 있는 숫자들이 2 또는 3 만큼 곱해져 결과값에 더해진다는 특징을 이용해 temp변수에 괄호의 깊이에 따른 값을 정의했으며, 완벽한 괄호가 완성된 경우 그 깊이에 따른 값을 더해주면 값을 도출했다.
코드
const input = require("fs")
.readFileSync(
process.platform === "linux" ? "/dev/stdin" : __dirname + "/example.txt"
)
.toString()
.trim()
.split("\n");
let st = input.shift().split("");
let stack = [];
let temp = 1;
let answer = 0;
let flag = true;
for (let i = 0; i < st.length; i++) {
const s = st[i];
if (s === "(" || s === "[") {
stack.push(s);
temp *= s === "(" ? 2 : 3;
} else if (s === ")") {
if (stack.length === 0 || stack[stack.length - 1] !== "(") {
flag = false;
break;
} else if (st[i - 1] === "(") {
answer += temp;
}
stack.pop();
temp /= 2;
} else if (s === "]") {
if (stack.length === 0 || stack[stack.length - 1] !== "[") {
flag = false;
break;
} else if (st[i - 1] === "[") {
answer += temp;
}
stack.pop();
temp /= 3;
}
}
console.log(stack.length > 0 || !flag ? 0 : answer);
728x90
'코딩 테스트 > 백준' 카테고리의 다른 글
[JS] 4659_비밀번호 발음하기 (0) | 2025.04.08 |
---|---|
[JS]1956_운동 (0) | 2025.04.04 |
[JS] 2941_크로아티아 알파벳 (0) | 2025.03.20 |
[JS] 1976_여행 가자 (0) | 2025.03.18 |
[JS] 8979_올림픽 (0) | 2025.03.15 |