[CodeKata_08] 유효판단
문제
s는 여러 괄호들로 이루어진 String 인자입니다.
s가 유효한 표현인지 아닌지 true/false로 반환해주세요.
종류는 '(', ')', '[', ']', '{', '}' 으로 총 6개 있습니다.
아래의 경우 유효합니다.
한 번 괄호를 시작했으면, 같은 괄호로 끝내야 한다.
괄호 순서가 맞아야 한다.
예를 들어 아래와 같습니다.
s = "()"
return true
s = "()[]{}"
return true
s = "(]"
return false
s = "([)]"
return false
s = "{[]}"
return true
//isValid 함수 설명 37번째줄부터 되어있습니다.
//확인해보세요!
function isValid(s) {
let matching = {
'(': ')',
'[': ']',
'{': '}'
};
let closeArr = [];
let openArr = [];
let sArr = s.split('');
let result = true;
for (let i = 0; i < sArr.length; i++) {
let thisStr = sArr[i];
let closeForOpen = matching[thisStr];
if (closeForOpen) {
openArr.push(thisStr);
closeArr.unshift(closeForOpen);
}
else {
if (thisStr === closeArr[0]) {
closeArr.shift();
openArr.pop();
} else {
result = false;
break;
}
}
}
return result && closeArr.length === 0;
}
//s가 '({})' 라고 가정하겠습니다.
function isValidForCommnet(s) {
let matching = {
'(': ')',
'[': ']',
'{': '}'
};
let closeArr = [];
let openArr = [];
let sArr = s.split('');
let result = true;
//sArr = ['(', '{', '}', ')'] 입니다.
//sArr을 for문 돌리면서
//시작괄호는 openArr에 넣어주고, ex) openArr = ['(', '{']
//끝 괄호는 closeArr에 넣어서, ex) closeArr = ['}', ')']
//openArr 마지막번째 괄호가 closeArr의 첫번째괄호랑 맞아야 된다는걸 확인하면 됩니다.
for (let i = 0; i < sArr.length; i++) {
let thisStr = sArr[i];
//이번 순서의 괄호(thisStr)가
//시작괄호-(,[,{- 이라면, matching에 key로 존재하니까
//closeForOpen가 ) or ] or } 일것이고,
//끝 괄호라면 undefined 이겠죠.
let closeForOpen = matching[thisStr];
//thisStr가 시작괄호여서 closeForOpen가 존재한다면,
if (closeForOpen) {
//openArr에 하나씩 push합니다.
openArr.push(thisStr);
//closeArr에는 앞쪽에서 unshift합니다.
closeArr.unshift(closeForOpen);
}
//closeForOpen가 존재하지 않는다는 뜻은 thisStr가 끝괄호라는 뜻
else {
//이번 괄호인 thisStr가 끝괄호면 closeArr에 무조건 첫 번째에 있어야 합니다.
if (thisStr === closeArr[0]) {
//제대로 괄호가 여닫기 됐으므로,
//closeArr의 첫번째 요소를 제거해주고
//해당 끝괄호랑 매치되는 openArr의 첫 요소도 제거해줍니다.
closeArr.shift();
openArr.pop();
} else {
//thisStr가 끝괄호인데,
//closeArr의 첫 번째 요소에 있지 않다는 뜻은 제대로 여닫기가 안 된 것이므로
//for문을 break로 끝내줍니다.
result = false;
break;
}
}
}
return result && closeArr.length === 0;
}
Author And Source
이 문제에 관하여([CodeKata_08] 유효판단), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mm0467/CodeKata08-유효판단저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)