---
# System prepended metadata

title: Untitled

---

開カッコと閉カッコからなる文字列が与えられます。
開カッコと閉カッコがきちんと対応しているかを判定してください。
カッコが対応しているとは以下を満たすことを言います。
- 任意の開カッコに対して、*それより後に*ペアになる閉カッコが存在すること
- ペアになっていないカッコが存在しないこと


```

# 入力と出力の例
() => True
)( => False # 閉カッコが先に来てしまっている
( => False
) => False
()() => True
(()) => True
())　=> False
(()(())) => True
(()))(=> False
(()))((())=> False
```

言語はなんでも大丈夫です！
inputの例: "(()(()))"
```typescript=
const handleIsValidChar =(input: string):boolean => {
    const stack:string[] = []
    const pairs: {[key:string]:string} = {
        '(':')',
    }
    
    for(let i =0; i<input.length; i++){
        const char = input[i]
        // ↓charが始まりカッコの場合
        if(pairs[char]){
        stack.push(char)    
        // ↓charが終わりカッコの場合
        }else if(char === ')'){
        // ↓始まりカッコがないのに終わりカッコが来た場合
        if(stack.length === 0) return false
        // ↓配列から最後の要素を取り除き、その要素を返す
        const lastOpen = stack.pop()
        // ↓最後に追加した始まりカッコと終わりカッコが対になっていない場合
        if(pairs[lastOpen] !== char)return false     
        }
    }
    // ↓始まりカッコと終わりカッコの数が一致しているか
    return stack.length === 0
}
```