簡単な自己紹介
- エンジニアになって1年くらい
- それまで10年くらい中学校の数学教員
- 大学は数学科だったけど遊び尽くしていたのでほぼ何もしてない
- 2024年1月から競プロ始めた
- 使用言語はPython
- 現在の順位(2024年1月28日時点)
競プロにはまったきっかけ
会社の人が競プロ挑戦したいという話を聞いて、自分も面白そうなのでやってみようと思ったから
やってよかった点
AIに頼ってしまう自分を変えられそう(な気がしている)
前提としてAIを使うことを否定するつもりもないですし、むしろ業務の効率化という点から考えると、AIとうまく付き合えるに越したことはないと思っています。
だけど自分みたいに弱々エンジニアの場合、とりあえずAIに聞いてみて、きちんとした根拠もなくAIの提案を鵜呑みにしてコードを書いたり考えたりすると、誤った記述や冗長な記述になってしまうことが実感としてありました。
また、AIを使うことで場当たり的な解決にはなっても、自分の血肉になっている感覚がないのも課題として感じていました。
競プロができるからといって実務でバンバン使うかというと必ずしもそうではないと個人的には思うのですが、それでもアルゴリズムやプログラミング的な思考をすることが今まで自分が感じていた課題を解決できるのではないかと感じているので、そういう意味でも競プロにん出会えてよかったと感じています。
備忘録
まず、A問題をやってみる。他の人も言及しているかもしれないが、大抵は最初に数値の入力だけでつまづくこともある。自分もそうだった。
以下簡単にまとめる。
# 数値を入力する
n = int(input())
print(n)
# 出力例
# 1
# 文字列ならこう
s = input()
print(s)
# 出力例
# りんご
# スペース区切りの整数の入力
n, m = map(int, input().split())
print(n)
print(m)
# 出力例
# n = 3
# m = 5
# 半角スペースで区切った数値をリストにする
a = list(map(int, input().split()))
print(a)
# 出力例
# a = [1, 2, 3]
n = int(input())
# 数字を入力するたびに改行していき、それをリストにする
a = [int(input()) for _ in range(n)]
print(a)
# 出力例
# a = [1, 2, 3]
自分が取り組んだA問題とB問題はだいたいこんな感じで、リスト、整数、文字列の入力でこと足りるケースが多かったです。
なんとなくわかってきたコツとしては「ざっくり計算量がどのくらいか考えること」。
例えば、forループが1回の場合に比べて、二重forループになると、1回のときと比べて計算量が2乗になってしまうケースが多いです。
なので計算すべき数が多い場合は、なるべく簡単にしないと(つまり計算量を減らす工夫をしないと)、すぐに実行時間制限オーバーになってしまいます。
あとは問題にひたすら取り組むこと。
あと、できたとしても個人的にはクソコードになってしまっていることが多いと感じているので、クソコード量産機にならないよう他の人の解答や解説を見て学んでます。