Swift教室 Swift と競技プログラミングの教室

入力と実行順序

読了目安 約2分

readLine で標準入力を読み、A+B 問題を解く。競プロの入出力の型を覚える。

この章の目次

競技プログラミングの問題は、「入力を受け取り、答えを出力する」形をしています。 入力の受け取り方を覚えると、解ける問題が一気に広がります。

readLine

標準入力は、プログラムに渡されるテキストです。 エディタの「標準入力」欄に書いた内容が、実行時にプログラムへ渡されます。

readLine() は標準入力を 1 行読み、文字列として返します。

Swift
let line = readLine()!
print("入力されたのは: \(line)")
入力例
こんにちは

readLine()!! は「入力が必ずある」とみなす印です。 入力が尽きているとエラーで止まります。理由は オプショナル の型が関わるためで、いまは決まり文句として覚えれば大丈夫です。

"\(line)" のように、文字列の中に \(変数名) を書くと変数の中身が埋め込まれます。 文字列補間と呼ばれる Swift の機能です。

数値として読む

readLine() が返すのは文字列です。 計算に使うには Int(...) で整数に変換します。

Swift
let a = Int(readLine()!)!
let b = Int(readLine()!)!
print(a + b)
入力例
3
5

試してみよう: 標準入力欄の数値を変えて、出力が変わることを確かめてください。

1 行に複数の値があるとき

3 5 のように空白区切りで並ぶ入力は、split で分解します。

Swift
let parts = readLine()!.split(separator: " ").map { Int($0)! }
let a = parts[0]
let b = parts[1]
print(a + b)
入力例
3 5

split(separator: " ") で空白で区切り、map { Int($0)! } で全部を整数に変換します。 この 1 行は競プロの定型句です。そのまま覚えてください。

実行順序

プログラムは上から順に 1 行ずつ実行されます。 readLine() は呼ばれるたびに次の行を読みます。

読む順番と入力の行数が合っていないと、実行時エラーになります。

学びどころ

概念一言まとめ
readLine()!標準入力を 1 行読んで文字列で返す
Int(文字列)!文字列を整数に変換する
split + map空白区切りの 1 行を整数の配列にする定型句
文字列補間"\(x)" で文字列に値を埋め込む

演習

1 行目に整数 A、2 行目に整数 B が入力されます。 A + B を出力してください。

テキスト
入力例:
3
5

出力例:
8
模範解答
Swift
let a = Int(readLine()!)!
let b = Int(readLine()!)!
print(a + b)