문자열을 입력받아서 문자열 내의 괄호의 짝이 맞는지 여부를 리턴해야합니다.
단계별로 함수를 작성해봅니다.
1. 괄호의 종류를 한가지로 정합니다.
2. 괄호의 종류를 늘려서 다른 괄호에서도 작동하도록 합니다.
3. 괄호를 제외한 문자열이 포함될 경우에도 동작하도록 합니다.
괄호의 종류는 (), {}, [] 이렇게 3가지입니다.
괄호는 먼저 열리고 "(" 열린만큼만 닫혀야합니다. ")"
예를 들어서 "([])" 이런식으로 구성되어 있어야합니다. "({][{)"
let output = balancedBrackets('(');
console.log(output); // // -> false
output2 = balancedBrackets('()');
console.log(output2); // --> true
let output3 = balancedBrackets('[](){}');
console.log(output3); // --> true
output4 = balancedBrackets('[({})]');
console.log(output4); // --> true
let output5 = balancedBrackets('[ ( ] { ) }');
console.log(output5); // --> false
처음에는 "()" 이 괄호 한가지만 생각하고 다음과 같이 코드를 작성했으나 확장성이나 테스트에 있어서 적절하지 못했습니다.
const balancedBrackets0 = function (str) {
// TODO: 여기에 코드를 작성합니다.
if(str.length===0){
return true
}
let arr =[];
//console.log(arr.includes("("))
for (let i=0; i< str.length; i++){
// console.log("i",str[i])
if(str[i]==="(" && arr.includes("(") === false ){
arr.push(str[i]);
}
else if (str[i] === ")" && arr.includes("(") === true && arr.length === 1){
arr.push(str[i])
}
if(arr[0] === "(" && arr[1] === ")" ){
arr.pop();
arr.pop();
}
}
//console.log("arr",arr)
if(arr.length === 0){
return true;
}else{
return false;
}
};
두번째 코드는 stack을 활용해서 객체와 closer를 이용한 풀이였습니다.
풀이 단계는 다음과 같습니다.
1. stack 배열 선언
2. opener 객체에 키-값 쌍으로 괄호쌍을 지정
3. closer에 닫히는 괄호를 문자열로 지정
4. 반복문으로 str의 길이만큼 순회
5. opener안에 키값이 있을경우 stack 배열에 삽입
6. str[i]의 값이 closer 중에 있을 경우
7. 스택배열의 마지막값을 뺀 뒤 opener의 키값에 대입해서 밸류를 얻고 그 밸류를 pair로 지정
8. pair와 str[i]가 같지 않으면 false 리턴
9. 마지막 결과값으로 stack의 길이가 0이면 true 0이 아니면 false 반환
const balancedBrackets = function (str){
const stack = [];
const opener = {
"{" : "}",
"[" : "]",
"(" : ")",
};
const closer = "}])";
for(let i = 0; i < str.length; i++){
// str[i] 중에 {, [, ( 이 있을 경우
if(str[i] in opener){
stack.push(str[i])
//}]) 중 하나라도 포함되어있으면
}else if ( closer.includes(str[i])){
//stack에서 빼냄
const top = stack.pop() ;
const pair = opener[top];
//pair는 "{,[,("를 키로하는 밸류값 "}, ], )"
//pair와 str[i]가 같지 않으면 false를 반환
console.log("pair",pair)
if(pair !== str[i]){
return false;
}
}
}
//stack의 길이가 0이면 true, 아니면 false
return stack.length === 0;
}
JavaScript Algorithm - LPS(Longest Prefix which is also Suffix) (0) | 2023.01.30 |
---|---|
JavaScript - getItemFromTwoSortedArrays (0) | 2023.01.27 |
JavaScript - Generator (0) | 2023.01.25 |
JavaScript - QuickSort (0) | 2023.01.25 |
JavaScript Algorithm - primePassword (0) | 2023.01.20 |