4개의 기호
(
)
[
]
를 이용해서 만들어지는 괄호열로, 아래 규칙으로 계산하는 프로그램을 작성하시오.
예를 들어 ()[[]]는 2 + 3 3 = 11이 나오며, ([])의 값은 2 3으로 6이다.
만약 쌍이 맞지 않거나 기호 순서가 비정상적이라 올바른 괄호 셋이 만들어지지 않는 경우에는 0을 반환한다.
입력값
(()[[]]) [][]((]) (()[[]])([])
// prototype 생성
if (!Array.prototype.peek) {
Array.prototype.peek = function () {
return this[this.length - 1];
};
}
if (!Array.prototype.isEmpty) {
Array.prototype.isEmpty = function () {
return this.length == 0;
};
}
function answer(str) {
let result = 0;
let stack = [];
let temp = 1;
for (let i = 0; i < str.length; i++) {
let mark = str[i];
switch (mark) {
case "(":
temp *= 2;
stack.push(mark);
break;
case "[":
temp *= 3;
stack.push(mark);
break;
case ")":
if (stack.isEmpty() || stack.peek() != "(") {
return 0;
}
if (str[i - 1] == "(") {
result += temp;
}
stack.pop();
temp /= 2;
break;
case "]":
if (stack.isEmpty() || stack.peek() != "[") {
return 0;
}
if (str[i - 1] == "[") {
result += temp;
}
stack.pop();
temp /= 3;
break;
}
}
// 한 쌍이 아닐 경우
if (!stack.isEmpty()) {
return 0;
}
return result;
}
(
= 2,[
= 3,)
= / 2,]
= /3- () or [] 은 현재 temp값을 result에 더해준다.
- 임시 변수 temp를 만들어준다.
- for문을 통해 str.length만큼 순회하며, 탐색할 수 있게 작성해준다. (
let mark = str[i]
)- switch문을 통해 만약 mark가
(
이 문자일 경우 2 를 하여 temp에 저장해주고 stack에 push한다.
[
일 경우 3으로 작성하고, 한 쌍이 아닐 경우 0을 리턴해주도록 작성한다.- 인접해 있는지 판단하기 위한 코드를 if문으로 작성해준다.