【スタック・キューメニュー】> STEP: 4 括弧列 (paizaランク C 相当) [難易度: 1774 ±35]
※リンク先へ移動するためには[paiza]へのログインが必要です。
N 文字の 括弧列 S が与えられます。与えられた 括弧列 が 正しい括弧列 かどうか判定してください。
ここで、 括弧列 とは以下のように定義します。
* (
または )
または空文字のみで構成される文字列
また、 正しい括弧列 とは以下のように定義します。
1. 空文字列は正しい括弧列である。
2. 文字列 s
が正しい括弧列であるとき、 (
+ s + )
は正しい括弧列である。
3. 文字列 s
, t
が正しい括弧列であるとき、 s
+ t
は正しい括弧列である。
たとえば、以下の文字列はすべて 正しい 括弧列です。
()
(())
()()
(()())
((((())())()))
また、以下の文字列はすべて 正しくない 括弧列です。
)(
(
())
((())
(()()))((()())()
入力値(例)
4
(())
出力値(例)
Yes
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $n = trim(fgets(STDIN)); $s = trim(fgets(STDIN)); $stack = []; for ($i = 0; $i < $n; $i++) { if ($s[$i] === "(") { $stack[] = $s[$i]; } elseif ($s[$i] === ")") { if (count($stack) == 0) { echo "No"; return; } else { array_pop($stack); } } } echo (count($stack) == 0) ? "Yes" : "No"; ?> |