質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

1371閲覧

rubyの少し難しい問題です

renre1221

総合スコア11

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2015/08/15 13:57

(,),(、)という4つの文字を要素とした配列があります。
この配列に対してカッコが正しく対応しているかどうかを調べるメソッドを定義してください。
下のコードは一体何をしているのでしょうか?
分かりやすく説明していだけるとうれしいです
def balanced?(array)
stack = Array.new()
array.each{|elem|
case elem
when '('
stack.push(elem)
when '{'
stack.push(elem)
when ')'
prev_elem = stack.pop
if prev_elem != '('
return false
end
when '}'
prev_elem = stack.pop
if prev_elem != '{'
return false
end
else
return false
end
}

if stack.empty?
return true
else
return false
end
end

p balanced?([]) #=> true
p balanced?(["(",")"]) #=> true
p balanced?(["{","(",")","}"]) #=> true
p balanced?(["{","(",")"]) #=> false
p balanced?(["(",")","}"]) #=> false

p balanced?(["(", "{", "{", "}", "(", ")", "}", "(", ")", ")"]) #=> true
p balanced?(["(", "{", "{", "}", "(", "}", ")", ")"]) #=> false

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

括弧の配列を受け取り,配列を頭から順に取り出して,
括弧の始まり('('や'{')の時はスタックに置いておいて,括弧の終わり(')'や'}')が来た時に
スタックの一番上に置かれた始まりの括弧が対応するものでなければfalseを返すものだと思われます.

投稿2015/08/15 14:05

編集2015/08/15 14:06
swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

プログラムの説明は swordone さんからの説明のとうりと思います。

String を stack のように使って判定するメソッドを書いてみました。

ruby

1# coding: utf-8 2def balanced?(array) 3 return true if array == nil 4 5 s = '' 6 array.each do |x| 7 if x == '(' || x == '{' 8 s += x 9 elsif x == ')' 10 return false if s.length == 0 || s[-1] != '(' 11 s = s[0..-2] 12 elsif x == '}' 13 return false if s.length == 0 || s[-1] != '{' 14 s = s[0..-2] 15 else 16 # (){} 以外は無視する 17 end 18 end 19 s.length == 0 20end 21 22p balanced?([]) #=> true 23p balanced?(["(",")"]) #=> true 24p balanced?(["{","(",")","}"]) #=> true 25p balanced?(["{","(",")"]) #=> false 26p balanced?(["(",")","}"]) #=> false 27 28p balanced?(["(", "{", "{", "}", "(", ")", "}", "(", ")", ")"]) #=> true 29p balanced?(["(", "{", "{", "}", "(", "}", ")", ")"]) #=> false

実行結果

$ ruby b.rb true true true false false true false

投稿2015/08/15 14:35

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問