JavaScriptを有効にしてください

paizaのコーディングスキルチェック問題を解いてみる #1【ランクC】

 ·  ☕ 2 分で読めます
Photo by Andrea Piacquadio from Pexels

Photo by Andrea Piacquadio from Pexels

本格的にプログラミングを始めたときに結構お世話になったのが、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ランクの問題を解いてみたい。

共有