๊ด€๋ฆฌ ๋ฉ”๋‰ด

FrontEnd :-)

[LeetCode-JS] Valid Parentheses ๋ณธ๋ฌธ

JavaScript/Algorithm

[LeetCode-JS] Valid Parentheses

code10 2022. 12. 10. 00:03

๐Ÿ™‹ ๋ฌธ์ œ: Valid Parentheses

Given a string s containing just the characters '(', ')', '{', '}', '[' and ']', determine if the input string is valid.

An input string is valid if:

  1. Open brackets must be closed by the same type of brackets.
  2. Open brackets must be closed in the correct order.
  3. Every close bracket has a corresponding open bracket of the same type.

Example 1:

Input: s = "()"
Output: true

Example 2:

Input: s = "()[]{}"
Output: true

Example 3:

Input: s = "(]"
Output: false

 

Constraints:

  • 1 <= s.length <= 104
  • s consists of parentheses only '()[]{}'.

๐Ÿ…ฐ๏ธ ํ’€์ด:

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length % 2 !== 0 ) {return false} //๋ฌธ์ž์—ด์ด ์ง์ˆ˜์—ฌ์•ผ ์„ฑ๋ฆฝ๋˜๋ฏ€๋กœ. ํ™€์ˆ˜์ธ ๊ฒฝ์šฐ false
    const hash = {"(": 1, ")": -1, "[": 2, "]": -2, "{": 3, "}": -3}
    if(hash[s[0]] < 0) {return false} // ์ฒซ ๋ฒˆ์งธ ๊ธ€์ž๋Š” ๋ฌด์กฐ๊ฑด ์—ฌ๋Š” ๊ด„ํ˜ธ, ์–‘์ˆ˜์—ฌ์•ผ ์„ฑ๋ฆฝ.
    let plus = [hash[s[0]]];
    for(let i = 1; i < s.length; i++){
        if (hash[s[i]] < 0 && Math.abs(hash[s[i]]) === plus[plus.length -1]){
            plus.pop(hash[s[i-1]])
        } else if(hash[s[i]] > 0){
            plus.push(hash[s[i]])
        } else{
            plus.unshift(hash[s[i]])
        }
    }
    if (plus.length === 0){
        return true
    }
    return false
};

>>  "ํ•ด์‰ฌํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•ด์•ผ์ง€"ํ•˜๊ณ  ์‹œ์ž‘ํ•ด์„œ... ์กฐ๊ฑด์„ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.. ์‹œ๊ฐ„์ด ๊ฝค ๊ฑธ๋ ธ์ง€๋งŒ ํ’€๊ธด ํ’€์—ˆ๋ ....

let plus~ ๋ถ€ํ„ฐ ์„ค๋ช…ํ•ด๋ณด๋ฉด, ์•ž์„  ์กฐ๊ฑด๋“ค์— ์˜ํ•ด ๋ฌธ์ž์—ด์˜ ์ฒซ ๋ฒˆ์งธ๋Š” ์—ฌ๋Š” ๊ด„ํ˜ธ์ผ ํ…Œ๋‹ˆ plus ๋ฐฐ์—ด์— ๋„ฃ์–ด์ค€๋‹ค.

๋‹ค์Œ ๋ฌธ์ž(๊ธฐํ˜ธ)๋ถ€ํ„ฐ for๋ฌธ์„ ์ด์šฉํ•ด์„œ, ์Œ์ˆ˜(๋‹ซ๋Š” ๊ธฐํ˜ธ)์ด๋ฉด์„œ ์ ˆ๋Œ€๊ฐ’์ด plus ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋ฉด ๋ฐฐ์—ด์—์„œ pop, ์ œ๊ฑฐํ•˜๊ณ ,

else if ์–‘์ˆ˜(์—ฌ๋Š” ๊ธฐํ˜ธ)๊ฐ€ ๋‚˜์˜ค๋ฉด plus ๋ฐฐ์—ด์— push, ์ถ”๊ฐ€ํ•˜๊ณ ,

else ์œ„์˜ ์กฐ๊ฑด๋“ค์ด ์•„๋‹Œ ๊ฒฝ์šฐ, plus ๋ฐฐ์—ด์— unshift, ๋ฐฐ์—ด ์•ž์ชฝ์œผ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. 

๊ทธ๋‹ค์Œ์—, plus ๋ฐฐ์—ด์— ๊ฐ’์ด 0์ด๋ฉด, ์ œ๋Œ€๋กœ ์—ด๊ณ  ๋‹ซํžŒ ๊ฒฝ์šฐ๋กœ, true๊ฐ€ ๋œ๋‹ค. 

 

>> ์ด๊ฑธ ์ž‘์„ฑํ•˜๋Š” ํ˜„์žฌ, ๋‹ค๋ฅธ ํ’€์ด๋Š” ์•„์ง ๋ณด์ง€ ๋ชปํ–ˆ๋Š”๋ฐ... ๋ณต์žกํ•˜๊ฒŒ ํ‘ผ ๊ฑด๊ฐ€ ์‹ถ๋‹ค. ์•„๋ฌดํŠผ I made it.

 

โœ… ๋‹ค๋ฅธ ์‚ฌ๋žŒ ํ’€์ด:

var isValid = function(s) {
    const stack = [];
    const map = {
        '(': ')',
        '{': '}',
        '[': ']',
    }

    for(let i = 0; i < s.length; i++) {
        if (s[i] === '(' || s[i] === '{' || s[i] === '[') {
            stack.push(s[i]);
        } else if (map[stack.pop()] !== s[i]) {
            return false;
        }
    }
    
    return !stack.length;
};
var isValid = function (s) {
    let stack = [];
    const mapping = { ')': '(', '}': '{', ']': '[' };
    for (let i = 0; i < s.length; i++) {
        if (s[i] in mapping) {
            const curr = stack.pop();
            if (mapping[s[i]] !== curr) {
                return false;
            }
        } else {
            stack.push(s[i]);
        }
    }
    return !stack.length;
}

>> ํ•ด์‰ฌํ…Œ์ด๋ธ”์—์„œ ๊ด„ํ˜ธ๋“ค์„ ์ˆซ์ž๋กœ ํ•  ๊ฒŒ ์•„๋‹ˆ๋ผ, '์—ด๋ฆฐ ๊ด„ํ˜ธ :  ๋‹ซํžŒ ๊ด„ํ˜ธ'๋กœ ๋งค์นญํ•ด์ฃผ๋ฉด ๊ฐ„๋‹จํ–ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค!!!

>> ์—ฌ๋Š” ๊ด„ํ˜ธ๋Š” stack์— ๋‹ด๊ณ , ์—ฌ๋Š” ๊ด„ํ˜ธ๊ฐ€ ์•„๋‹Œ (๋‹ซ๋Š” ๊ด„ํ˜ธ๋ผ๋ฉด) stack์—์„œ ํŒํ•˜๋Š”๋ฐ, ๊ทธ๊ฒŒ ํ•ด์‰ฌํ…Œ์ด๋ธ”์— ๋งค์น˜๋˜์ง€ ์•Š์œผ๋ฉด, false. 

>> ๋งˆ์ง€๋ง‰์ค„, return !stack.length ๋Š” true๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, return true๋กœ ํ•ด๋„ ๋˜๋ ค๋‚˜ ์‹ถ์—ˆ๋Š”๋ฐ "(", "(("์™€ ๊ฐ™์ด ์—ฌ๋Š” ๊ด„ํ˜ธ๋งŒ ์žˆ์„ ๋•Œ๋Š” true๊ฐ€ ๋‚˜์™€์„œ Wrong answer!!์ด ๋˜์—ˆ๋‹ค.

var isValid = function(s) {
    let arr = [];
    if(s.length%2 !== 0)return false;
    for(let i=0; i< s.length; i++){
        if(s[i] === ')' || s[i] === ']' || s[i] === '}'){
            if(arr.length== 0)return false
            el = arr.pop()
            if(s[i] === ')' && (el === '{' || el === '['))return false;
            if(s[i] === '}' && (el === '(' || el === '['))return false;
            if(s[i] === ']' && (el === '{' || el === '('))return false;
        }else{
            arr.push(s[i])
        }
    }
    return arr.length === 0;
};
var isValid = function(s) {
     let stack = [];
    
    for (let i = 0 ; i < s.length ; i++) {
        let c = s.charAt(i);
        switch(c) {
            case '(': stack.push(')');
                break;
            case '[': stack.push(']');
                break;
            case '{': stack.push('}');
                break;
            default:
                if (c !== stack.pop()) {
                    return false;
                }
        }
    }
    
    return stack.length === 0;
    
};

>> charAt() ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด์—์„œ ํŠน์ • ์ธ๋ฑ์Šค์— ์œ„์น˜ํ•˜๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋‹จ์ผ๋ฌธ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. index๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ 0์ž…๋‹ˆ๋‹ค.

'JavaScript > Algorithm' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

programmers ์˜น์•Œ์ด (1)  (0) 2023.03.07
[LeetCode-JS]ย Merge Two Sorted Lists  (0) 2022.12.15
[LeetCode-JS] Longest Common Prefix  (0) 2022.12.09
[LeetCode-JS] Roman to Integer  (0) 2022.12.08
[LeetCode-JS] Palindrome Number  (0) 2022.12.07
Comments