はじめに
やはりエンジニアであれば基本的なアルゴリズムへの理解を深めておきたいなということで、競プロを始めました。
普段はiOSのエンジニアをしているので、言語にはSwiftをチョイスしています。
C++がメジャーで、処理性能もいいみたいですが、競プロの世界で頂点を目指してやろう!みたいな野望はなく、教養として身につけたいというくらいなので、一番慣れているSwiftを選択しました。
使用サイトについてはいくつか候補がありましたが、AtCoderにしました。
勉強していく過程で知ったメソッドなど競プロに役立つコードの書き方を、ほぼ自分用の学習記録として残していきます。
この記事に書いてあること
- 問題を解いていく中で便利だなと思った関数について、使い所とともに残していきます。
- 始め方については本記事には書いていないので、「今から始めるよ」という方は、以下の記事を参考にしてみてください
競プロで役立ったコードたち
①各桁の数字を足すコード
let num = 1234
let digitSum = String(num).compactMap { $0.wholeNumberValue }.reduce(0, +)
print("合計: ", digitSum) // 合計: 10
wholeNumberValueを使用すことでCharacter型の数字をInt?型で扱えます。
Intに変換できない文字(a,-など)はnilになります。
今回のコードでは数字に変換できたもののみを使用して、reduceで足したいので、compactMapを使用しています。
一応以下のようにも書けます。
var nums = 1234
var sum = 0
while nums > 0 {
sum += nums % 10
nums /= 10
}
print("合計: ", sum)
このコードは以下の問題で使用しました
②同じ数字でできる数字の配列(小さい順)を作成する
1,11,111,1111...や2,22,222,2222...のような数字の配列を作るということです。
以下のように作成できます。
let repunits = (1...12).map { Int(String(repeating: "1", count: $0))! }
このコードでは[1, 11, 111.....111111111111]という配列を作成しています。
以下の問題で使用しました
便利だなと思ったメソッド等があれば随時更新していきます。
まずはAtCoderで茶コーダーを目指すぞ〜。