質問: Rubyのアルゴリズム問題について、助言いただきたく思います。 〜問題〜 入力された時刻から7時間前が24時間表記で何時になるかという問題です。 標準入力から h:m というフォーマットで入力がされます。 条件は 0<=h<=12 0<=m<=59 〜例〜 入力 6:30 とされたときに7時間前なので 出力 23:30 となるようにしたいです。 〜例2〜 入力 12:59 出力 5:59 Rubyの初級問題に取り組んでいるレベルなのですが、アプローチの仕方が全くわかりませんでした。 配列や文字列で受けとって不要な部分(分やコロン)を削除しようと考えましたが、入力の時間が二桁か一桁 かもわからないのでどのように削除すべきか・・・ などと考えたのですが、そもそもの考え方も違うのかもという状況です。 説明不足でしたら申し訳ございませんが、どのように解決すべきでしょうか?
回答: split で、時と分の数値をそれぞれ分解すると楽だと思いました。 解答例を載せます。 ``` str = gets str = "6:30" # str = "12:59" # splitメソッドでコロンで区切って配列["6", "30"]にする。 # 次に、mapとto_iで、数値の配列[6, 30]にする。 # 2通り書いておきます。 h, m = str.split(":").map(&:to_i) h, m = str.split(":").map{|t| t.to_i} # マイナス7 をして24で割れば、7時間前の24時間表記になります。 h = ( h - 7 ) % 24 # 文字列の構成について、2通り書いておきます。 res = "#{h}:#{m}" res = h.to_s + ":" + m.to_s puts res ```