From b984bc3b4b84a2c8e4a0bc80b16aeb843f7bd99a Mon Sep 17 00:00:00 2001 From: youngduck Date: Mon, 25 Aug 2025 10:21:18 +0900 Subject: [PATCH] =?UTF-8?q?valid-parentheses=20=ED=92=80=EC=9D=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- valid-parentheses/youngduck.js | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 valid-parentheses/youngduck.js diff --git a/valid-parentheses/youngduck.js b/valid-parentheses/youngduck.js new file mode 100644 index 000000000..2cb31345f --- /dev/null +++ b/valid-parentheses/youngduck.js @@ -0,0 +1,41 @@ +/** + * @param {string} s + * @return {boolean} + */ +var isValid = function (s) { + // stack문제. open,close에 따라 스택처리 + // 최종 stack 비워져있는지 마지막 확인까지. + const stack = []; + // open,close Bracket index 위치로 짝궁 판단할예정 + const openBracket = ['(', '[', '{']; + const closeBracket = [')', ']', '}']; + // 반환할 결과값 flag + let result = true; + + [...s].map((item) => { + // indexOf자체는 선형검색이라 O(n)이지만 데이터 양이 3으로 고정되어있으므로 O(1)로 볼 수 있음 + const itemIndexAtOpenBracket = openBracket.indexOf(item); + const itemIndexAtCloseBracket = closeBracket.indexOf(item); + // openBracket 타입 + if (itemIndexAtOpenBracket > -1) { + // push,pop 모두 O(1) 시간복잡도를 가짐. 끝에 요소 추가제거이므로 + stack.push(item); + } + // clseBracket 타입 + else if (itemIndexAtCloseBracket > -1) { + const target = stack.pop(); + if (target !== openBracket[itemIndexAtCloseBracket]) { + result = false; + } + } + }); + + if (stack.length !== 0) { + result = false; + } + + return result; +}; + +// 시간복잡도 : O(n) +// 공간복잡도 : O(n)