このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のCランクレベルアップメニューから「文字列 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
パイザ君の家の前では毎週日曜日に工事が行われます。この先 N 週間、工事が日曜日の何時に始まり、どれくらいの時間続くのかは分かっています。パイザ君は工事の間は家を離れようと思っているので、それぞれの日に工事が何時に終わるのかを知りたいと思いました。
工事が N 週間続くとして、各週日曜日の工事が始まる時刻と、工事が何時間何分続くのかに関する情報が与えられるので、工事が終わる時刻を 00:00 から 23:59 までの 24 時間表記で出力してください(ここで「工事が終わる時刻」とは、工事が h 時間 m 分続くとした場合、工事が始まった時刻の h 時間 m 分後を指します)。
入力される値
入力は以下のフォーマットで与えられます。
1 2 3 4 |
N t_1 h_1 m_1 ... t_N h_N m_N |
1 行目には工事が続く週の数を表す正整数 N が与えられ、 2 行目から (N + 1) 行目には工事が始まる時刻と、工事がどれくらい続くのかについての情報が、 "t_i h_i m_i" という形式で与えられます(1 ≤ i ≤ N)。これは時刻 t_i に工事が始まり、 h_i 時間 m_i 分工事が続くことを意味しています。 t_i, h_i, m_i は各行において半角スペース区切りで与えられます。
t_i は 24 時間表記で時刻を表す文字列で、 "AB:XY" という形をしており、これは AB 時 XY 分を表します。ただし、今回は 00:00 から 23:59 までの 24 時間表記を採用し、時・分を表す数字が 1 桁の場合には十の位を で埋めます。期待する出力
入力された通りの順番で、各週の工事が終わる時刻を N 行出力してください。時刻の表記は入力と同じフォーマットに従うものとし、 24 時以降は翌日の時刻を記し、 00:00 から 23:59 までの間に収まるように、また、時や分を表す数字が1桁の場合には十の位を で埋めてください。たとえば 24 時は 00:00、 27 時は 03:00 となります。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
考え方
執筆中
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
import Foundation // 1行目は読み飛ばし _ = readLine()! // 2行目以降、空白で区切られた文字列の配列として、工事予定を入れる let sa = Array(AnyIterator { readLine() }).map{ String($0).split(separator: " ") } // 毎週ごとの計算 for s in sa { // 開始時刻を分解 let hhmm = s[0].split(separator: ":").map { Int(String($0))! } // 所要時刻を Int 型に変換 var sh = Int(s[1])! var sm = Int(s[2])! // 開始時刻(分)から終了時刻を求める sm += hhmm[1] if sm > 59 { sh += 1 sm -= 60 } // 開始時刻(時)から終了時刻を求める sh += hhmm[0] sh %= 24 // 出力 print((sh > 9 ? "" : "0") + "\(sh):" + (sm > 9 ? "" : "0") + "\(sm)") } |