2日目にやったこと
こんにちわ。今日は朝早く起きようと思いましたが、気づいたら11時。。。。
土曜日なんでと心を許しながら
- Atcorder Beiginers Constestに参加してみた!!
- アルゴリズムの勉強を少ししてみた
この2本立てでいこうかなと思います。
それでは行きましょう!!
ABC281回参加
今日初めてAtCorder Beginers Contestに参加しました。
今回俺が解けたのはA〜C問題!!
D問題は途中までできたけど、それ以降ができなかった。。。
そこの感想も踏まえて他の人の回答を見ながらどのようにしていくかも書いていけたらなと思います。それでは行ってみよう!!
A問題
A問題はこちらから〜
自分の書いたプログラムは以下の通りです。
s = int(input())
while s>=0:
print(s)
s-=1
解説すると
1行目で標準入力をしつつ、それをint型に変えてsに代入している
2行目以降のwhile文でs以下の文字列を出力している。
ここに関してはすぐできた!!
B問題
B問題は[こちら](https://atcoder.jp/contests/abc281/tasks/abc281_b)〜
自分の書いたプログラムは以下の通りです。
s = list(input())
length = len(s)
if length != 8:
print('No')
exit()
for i in range(length):
if i == 0 or i == length - 1:
if not ('A' <= s[i] <= 'Z'):
print('No')
exit()
elif i == 1:
if not (s[1].isdigit() and 1 <= int(s[1]) <= 9):
print('No')
exit()
else:
if not (s[i].isdigit() and 0 <= int(s[i]) <= 9):
print('No')
exit()
else:
print('Yes')
正直、今回のB問題はC問題より難しかった。
今回どこが難しかったかというと大文字と数字の判断基準!!
ここを整理していきたいです!!
参考した記事はこちら〜
まず、今回のキモは2つあって
- 英字の大文字かを判断する
- 数字かどうか判断する
まず、大文字かどうか判断する方法を調べてみました。
pythonには大文字かどうかを判断する関数がありました。それがこちら
str.isupper()
pythonには数字かどうかを判断する関数もありました。それがこちら
num.isdigit()
C問題
C問題は[こちら](https://atcoder.jp/contests/abc281/tasks/abc281_c)〜
自分の書いたプログラムは以下の通りです。
N,T = map(int,input().split())
l = input().split()
total=0
for i in range(len(l)):
total+=int(l[i])
music = T%total
for i in range(len(l)):
if music>=int(l[i]):
music-=int(l[i])
else:
print(f'{i+1} {music}')
break
2~4行目は以下の通りに書き換えれる!!
t_list = list(map(int, input().split()))
t_cycle = sum(t_list)
sum関数パッと出てこなかった、、、
これからコードを短く書くことを意識して使ってみよう!
アルゴリズムを勉強してみた
アルゴリズムとは何なんだ〜!?分かってるようで分かってなかったのでもう一度勉強してみた、、
アルゴリズムとは
一言で言えば、「問題を解決するための手順や計算方法」って書いてありました!!
簡単に言うと、公式みたいな感じなのかな!?
アルゴリズムを勉強するメリットは以下の通り
- 計算量が早くなる
- 短いコードで書ける
自分みたいな初心者は必要ないけど今後重要になってくるらしい!!
D問題とか解く時には必須って書いてあったから勉強して短いコード書けるように頑張ります!!
計算量
Big O notation(Big O記法)
これはどのくらい時間がかかるかを示したものである
表記の仕方はO(1)、O(n)、O(n^2)だったりと色々ある。
これはy=1であったりy=nを書いてあげるとわかるとおり、時間がどれくらいかかるよと表している。
つまりO(n^2)が計算量が多いことがわかる。
こうやって考えると分かってきた。
実際にO(n)のコードを書いてみた。
これが以下の通りだ。
# o(n)
def func(numbers):
for num in numbers:
print(num)
n回回しているからこうなることがわかる
O(log n)のコードはこんな形だ!
def func1(n):
if n<=1:
return
else:
print(n)
func2(n/2)
何でこうなるの??って最初思ったが、漸化式を解くとこうなることがわかった!!
これからまずソートのアルゴリズムを勉強をする!!
めちゃくちゃ大変だけど頑張ります!!
感想
今日で今後の課題点などがわかったので、
これからは
- アルゴリズム
- pythonの基本的な関数
といったところを勉強していきます。色々大変だと思うのですがよろしくお願いします。