本格的にプログラミングを始めたときに結構お世話になったのが、paizaというプログラミング学習サイト兼プログラマー向け転職サイトです。
ITエンジニア・プログラマ向けの転職・就活・学習サービス【paiza(パイザ)】
新しい言語を覚えるときに基本的なことを一通り網羅するのにとても便利。
またpaizaにはスキルチェックという問題集みたいなものがあって、各ランクの問題を溶けたら自分のランクが上がっていき、ランクに応じて求人に応募できるようになる。
ちなみに自分はAまでは解けた。
ゲームみたいで楽しいし、有名なアルゴリズムの勉強になったりする。
レベル的には多分AtCoderとかよりは簡単なものが多いと思う。
スキルチェックの練習問題のようなものが用意されていて、こちらは掲載等も自由だそうなのでちょっとやってみようと思う。
自分のコードの直したほうがいい部分とかを指摘してくれる人がいたら嬉しい。
問題
パイザ君の家の前では毎週日曜日に工事が行われます。この先 N 週間、工事が日曜日の何時に始まり、どれくらいの時間続くのかは分かっています。パイザ君は工事の間は家を離れようと思っているので、それぞれの日に工事が何時に終わるのかを知りたいと思いました。
工事が N 週間続くとして、各週日曜日の工事が始まる時刻と、工事が何時間何分続くのかに関する情報が与えられるので、工事が終わる時刻を 00:00 から 23:59 までの 24 時間表記で出力してください(ここで「工事が終わる時刻」とは、工事が h 時間 m 分続くとした場合、工事が始まった時刻の h 時間 m 分後を指します)。
文字列 | レベルアップ問題集 | プログラミング学習サービス【paizaラーニング】
//入力例1
1
13:00 1 3
//出力例1
14:30
僕の解答
package main
import (
"fmt"
"strconv"
)
func ItoaTime(n int) string {
s := strconv.Itoa(n)
if n < 1 {
return "0" + s
} else {
return s
}
}
func main(){
var n int
fmt.Scan(&n)
for i := 0; i < n; i++ {
var startAt string
var hours, minutes int
fmt.Scan(&startAt)
fmt.Scan(&hours)
fmt.Scan(&minutes)
startHour, _ := strconv.Atoi(startAt[0:2])
startMinute, _ := strconv.Atoi(startAt[3:5])
endHour := startHour + hours
endMinute := startMinute + minutes
if endMinute / 60 >= 1 {
endMinute %= 60 // endMinute = endMinute % 60 と同じ意味
endHour++
} else {
endMinute %= 60
}
endHour %= 24
fmt.Printf("%s:%s\n", ItoaTime(endHour), ItoaTime(endMinute))
}
}
今回は勉強中のGoで書いてみました。
ランクCはまだ簡単かな
Go含む暗黙型変換をしてくれない言語の場合は、数字↔文字列の変換の作法でつまったりしそうかな。
あとは、分の繰り上がりを計算するのに、余りをつかうとか。
次はBランクの問題を解いてみたい。