すみません。気が早いです。
Atcoderの言語アップデートシートにSwift5.0.1を追加しておいたので,追加されてくれ...!!!
c++のコレはSwiftでこう書くってのをまとめます。随時更新
std:cin, scanf
これないです(草)
Swiftの場合,標準入力は readLine()
のみになります。演算子を自作して配列をタプルで返却させることで同じような書き方ができます。
追記:Stringにsplitがあった
import Foundation
prefix operator *
prefix func * <T> (a: [T]) -> (T, T) {return (a[0], a[1])}
// let (a, b) = *readLine()!.components(separatedBy: " ").map({Int($0)!})
let (a, b) = *readLine()!.split(separator: " ").map({Int($0)})
print(a, b)
// 入力:1 4
// 出力:1 4
3つのタプル版が欲しい時は,増やしましょう
prefix func * <T> (a: [T]) -> (T, T, T) {return (a[0], a[1], a[2])}
std:cout, printf
printf
みたいにフォーマットしたい時は String
を間に挟む必要があります。
let hoge = 1, huga = 2
// std:cout
print(hoge) // 出力:1\n
// printf
print(String(format: "%03d", hoge)) // 出力:001\n
print(String(format: "%03d", hoge), terminator: "") // 出力:001
print(hoge, huga) // 出力:1 2
print(hoge, huga, separator: "!") // 出力:1!2
print
の引数として terminator: 最後にprintする文字列
, separator: 項目間にprintする文字列
を与えることができるので,改行なしや指定文字で区切る等ができます。
if, for, while
条件は ()
で囲まなくて良いが,コードブロックは {}
で必ず囲む
// if
if 条件 {処理} else if 条件 {処理}
// while
while 条件 {処理}
// do-while
repeat {処理} while 条件
// for
for 定数 in 式 option(where 条件式) {処理}
// 0から9を表示する
for i in 0..<10 {print(i)}
ちなみに範囲演算子 ..<
は以上未満で, …
は以上以下です。
switch
swiftにもswich-caseがあります。
※breakが要りません
配列 Array
Swiftの配列 Array
は可変長なので vector
みたいに使えます
// 宣言
var a: [Int] = [1, 2, 4, 5, 0]
var b: [Int] = []
var c = Array<Int>()
どれでもいい
対応は下記の通り
vector<int> cpp(5, 0);
var swift = [Int](repeating: 0, count: 5)
cpp[n] swift[n]
cpp.size() swift.count
cpp.push_back(T) swift.append(T)
cpp.pop_back() swift.removeLast()
cpp.front() swift.first!
cpp.back() swift.last!
cpp.erase(cpp.begin()+n) swift.remove(n)
詳しくは↓
辞書 Dictionary
var a = ["Swift": 2014, "Objective-C": 1983]
var b: [String: Int] = [:]
var c = Dictionary<String, Int>()
a["key"]
のようにアクセスします。ただし返り値はオプショナルになります。
詳しくは↓
pair
Swiftにはpairがないです。そのため,自前で実装するかタプルを使います。
例題:ABC131-D
これは締め切りが早い順に片付けるのが想定解です。Atcoderの解説PDFではc++でpairを使っています。
import Foundation
prefix operator *
prefix func * <T> (a: [T]) -> (T, T) {return (a[0], a[1])}
func readInt() -> [Int] {return readLine()!.components(separatedBy: " ").map({Int($0)!})}
func main() {
let N = Int(readLine()!)!
var tasks: [(Int, Int)] = []// タプルを使ってタスクを持つ
for _ in 0..<N {
tasks.append(*readInt())
}
tasks.sort(by: {return $0.1 < $1.1}) // returnは無くてもいい
var isYes = true
var sum = 0
for (a, b) in tasks {
sum += a
if sum > b {
isYes = false
break;
}
}
print(isYes ? "Yes" : "No")
}
main()
タプルのソートをする場合,クロージャでどう入れ替えるかを渡す必要があります。
True になるようにソートされるので,この場合昇順です。
あ,サンプルしか動かしてないのでわかんないです。
おわり
とりあえずこれだけわかってればABC-Cまでは解けるんじゃないですかね?