🍁
Swiftでアルゴ式を進める時に便利な関数たち(随時更新)
アルゴ式
アルゴ式は
・プログラミングや情報科学をコツコツ学べる「教科書」
・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
の2つで構成される、Web上で完結した学習コンテンツです。
アルゴリズムの復習でもしてみようということで始めました。
便利な関数たち
utils.swift
import Foundation
// 標準入力から整数をひとつ取得
func readInt() -> Int {
return Int(readLine()!)!
}
// 標準入力から空白区切りの文字列を配列で取得
func readArrayString() -> [String] {
return readLine()!.split(separator: " ")
.map { String($0) }
}
// 標準入力から空白区切りの整数を配列で取得
func readArrayInt() -> [Int] {
return readLine()!.split(separator: " ")
.map { Int(String($0))! }
}
// 標準出力にYesかNoを出力(アルゴ式でよくある出力)
func printYesNo(_ flag: Bool) {
print(flag ? "Yes" : "No")
}
// もらった整数が素数かどうかをそこそこの速さで判定
func isPrime(n: Int) -> Bool {
if n == 1 { return false }
if n == 2 { return true }
if n % 2 == 0 { return false }
var i = 3
while i * i <= n {
if n % i == 0 { return false }
i += 2
}
return true
}
// もらった整数の約数を配列で返す
func divisor(n: Int) -> [Int] {
var array = [Int]()
var i = 1
while i * i <= n {
if n % i == 0 {
array.append(i)
if i * i != n {
array.append(n / i)
}
}
i += 1
}
return array.sorted()
}
// 文字列を反転する
func reversedString(str: String) -> String {
return String(str.reversed())
}
// 回文かどうかを判定する(アルゴ式は回文が好きらしい)
func isPalindrome(str: String) -> Bool {
return str == reversedString(str: str)
}
Discussion
printYesNo(_:)
メソッド便利ですね…!処理は変わりませんが、こう書くとスッキリしますね↓
あと約数列挙ですが、現状だと計算量がO(n) になっています。O(\sqrt{n}) にしないと解けない問題があったので注意です。
AtCoder では
速い方法に修正しました。