留学生のプログラミング勉強日記 (original) (raw)
To Do (2025-07-04)
- [x] プログラミング練習1問題
- [x] 研究
- [x] 課題!
日記
やっと昼夜逆転を完全に戻しました!(11時睡眠7時起き)
最近、やっていることも多くて、やってみたいことも多くて大変です。
そのため、プログラミング問題以外にもいろんなことに挑戦しているんですが、まだ成果は出ていません。
今後、何か成果が出たらまた報告できるのを楽しみにして、頑張ります!
今日のプログラミング問題
感想
講義が時間的に重ならないように、最小の教室数を求める問題。 時間が重ならないためには、開始時間が早い順に、終了時間もできるだけ早いものを選んでいく必要がある。
既に割り当てた教室の中で終了時間が最も早いものから再利用できるかを確認する必要がある。
つまり、終了時間が早い順に管理するために優先度付きキューを使って、 新しい教室が必要かどうかを判定する。
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-07-03)
- [x] プログラミング練習1問題
- [x] Atcoder_Problems
今日のプログラミング問題
感想
線が交差しないように、できるだけ多くの線をつなぐ本数を求める問題。 線が交差しないためには、左側のポート番号が小さい順に、 右側の接続先も小さい順になるように選ぶ必要がある。
つまり「右側の接続先の番号」が単調増加するように部分列を選ぶことを考慮するとLISを求める問題に置換可能。
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-07-01)
- [x] プログラミング練習1問題
- [x] 研究
日課
研究のために、論文のアルゴリズムを実装しています!
これまで競技プログラミングで実装力は鍛えられたのですが、Jupyter Notebook上で全体を把握して実装せず、論文の数式をそのまま段階的に実装してしまったため、コードがかなりごちゃごちゃになってしまいました。
また、せっかくオブジェクト指向を活かせるPythonを使っているのに、クラスなどの重要な機能を使わず、毎回ハードコーディングで書いているだけでは、自分の成長にもつながらないと感じました。
そこで、これまで書いていたもの(ipynb形式で関数化しただけのコード)をクラス化して、今後同じモジュールが必要になったときに再利用しやすいようにしたいと考え、実装を進めています。
特に、深層学習などで他の人が作ったクラスを使うと本当に便利だと感じたので、自分でも同じように作れるようにしたいと思いました。
しかし、コードをしっかりモジュール化したら、なぜか再現性が取れず、変な結果が出てしまいました…。
ただ、数式自体には問題がなさそうだったので、論文のハイパーパラメータを参考にして再度試してみてもダメでした。
今週は何が問題なのかをしっかり考えながら、腰を据えて実装を直していく予定です(´;ω;`)****
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-06-29)
- [x] プログラミング練習1問題
- [x] 療養
- [x] バイト
日課
今日は体調不良で、プログラミング1問とバイト、適性検査(集中できなくて時間切れ(´;ω;`))だけやりました。
たぶん、エアコンをつけっぱなしで寝てしまって風邪をひいたかもしれません。
韓国では「バカは夏風邪をひく」という言葉がありますけど、エアコンつけっぱなしの自分はやっぱりバカかもしれませんね…。
今日のプログラミング問題
BOJは11690
昨日AtCoderで解けなかったLCM問題の基礎編みたいな問題です。
でもPythonで10 ** 8までの配列を扱うメモリ管理がきつかったので、他の問題を解きました。
'''
問題 :
2次元の世界で、幅Wの区間に高さH以下のブロックが並んで積まれています。十分な雨が降ると、ブロックの間に水がたまります。
ブロックの高さの配列が与えられるので、水がたまる総量(1マス=1単位)を計算してください。
解法 :
piv = 1, 2, 3... n - 1 で
左の最大値、右の最大値(壁の高さの最大値を示す)を求めて、
二つの壁の中で小さいものから今の壁の高さを引くと、結局問題を満足する答えが得られる。
'''
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-06-28)
- [x] プログラミング練習1問題
- [x] Atcoder412
- [x] 研究
- [x] ジム
Atcoder 412 (perf 1001, rating 631 -> 676)
Cまでしか解けなかったのに1001perf...初心者に厳しい問題セットだったかなーと思います
A
n行の入力で a_i < b_iの数を数える問題
コード
n = int(input()) ans = 0 for i in range(n): a, b = map(int, input().split()) if a < b: ans += 1 print(ans)
行別に入力をもらい、a, bを比較してbが大きいとansを+=1しました!
B
S の先頭でない英大文字の直前の文字はすべて T に含まれるかを確認する問題。
AtCoder Total
Pythonなら.isupper()
を用いると簡単に英大文字の判別ができます!
コード
n = str(input().rstrip()) m = set(str(input().rstrip()))
for i in range(len(n) - 1): now = n[i + 1] if now.isupper(): if n[i] not in m: print('No') sys.exit() print('Yes')
C
問題文の条件が複雑ですので、この記事では解法の説明だけ載せます!
まず、各々のテストケースでもらう数字列中、最初のドミノと最後のドミノは決まっているため、分割しました。
また、答えは条件を満たすドミノの並べ方は存在しますか?また、存在する場合は最小で何個のドミノを並べる必要がありますか?
このように、存在する場合は最小で何個を求める問題であるため、貪欲法を検討しました。
まず、lstの変数に数字列をリスト形式で入力します。
また、上述したよう最初のドミノと最後のドミノ、それ以外のドミノ数列リストで分割します。
n = int(input()) lst = list(map(int, input().split())) now = lst[0] end = lst[-1] llst = lst[1:-1] llst.sort()
まず、条件を満たすドミノの並べ方は存在するのかを確認するため、最後のドミノを倒すために必要な中間のドミノを選ぶ戦略を考えます。
最後のドミノ(end)を右に倒すためには、その直前のドミノをxとするとx * 2 ≥ end
を満たす必要があります。
この条件を満たすxをllstの中からなるべく小さいものを貪欲に選んで、倒れる連鎖を作ります。
これを繰り返し、最初のドミノ(now)にたどり着けるかを判定します。
具体的には、ソートしたllstを二分探索で使い、endを倒せる最小のxを探します
そのxを使ってendを更新します(end = x)
もしllst内にx * 2 ≥ end
を満たすxがなければ失敗です。
whileループでこの更新を繰り返し、最終的にend ≤ 2 * nowになれば、全てのドミノが倒せます。
したがって、正解コードは
tc = int(input()) for _ in range(tc): n = int(input()) lst = list(map(int, input().split())) ans = 2 now = lst[0] end = lst[-1] llst = lst[1:-1] llst.sort() flag = True
while end > now * 2: newlst = [i * 2 for i in llst] lft = bisect.bisect_left(newlst, end) llft = bisect.bisect_left(newlst, end * 2)
if lft == llft: print('-1') flag = False break
ans += 1 end = newlst[lft] // 2 if flag: print(ans)
コード
n = str(input().rstrip()) m = set(str(input().rstrip()))
for i in range(len(n) - 1): now = n[i + 1] if now.isupper(): if n[i] not in m: print('No') sys.exit() print('Yes')
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-06-27)
- [x] プログラミング練習1問題
- [x] 研究
- [x] コーディングテスト2つ!
日課
研究とコーディングテストとインターンの課題
やっていることが多くて、そこから新しいことを学んだりしていますが、会社や大学の研究なので、残念ながら報告はできません(´;ω;`)
日記
今日のプログラミング問題
数字A, Bが入力され、Aには2倍 or + 1をすることができる。
数字AがBになるまで必要な演算の回数を求める。
A, B <= 1,000,000で十分小さいし、
この問題は大きい数字が2で割れるなら割ることが有利なので、貪欲なアプローチで解いた。
感想
今年の目標
- [x] AtCoder 茶色(2025.4月中)
- [x] BOJ(オンラインジャッジ)プラチナ4(2025.5月中)
- [ ] 応用情報技術者(秋試験)
- [ ] 統計学検定準一級(2025年前期中)
- [ ] Atcoder 緑(2025年中)
- [ ] 松尾研究室DL基礎修了(進行中)
- [ ] Toeic 850++
To Do (2025-06-26)
- [x] プログラミング練習1問題
- [x] 研究
- [x] 課題
- [x] Atcoder 409, 410振り返り
ABC409(perf 543, rating 579 -> 575)
飲酒atcoderはやめましょう
用事があって、酒飲んでからatcoderやりました!
韓国では酒のことを勇気のポーションって言ってる人もおるんですけど
自分も酒飲んでたら勇気が湧いちゃってとんでもない答え出しすぎました。
飲酒atcoderはやめましょう!
A - Conflict
4 oxoo xoox
x
がかぶっているときもYes
を出力してしまい一回WA
B - Citation
長さ N の非負整数列 A=(A1,A2,…,AN)A=(A1,A2,…,AN) が与えられます。次を満たす最大の非負整数 x を求めてください。
- A に、 x 以上の要素が重複を含めて x 回以上現れる。
1 <= N <= 100なので
0 ~ 100の範囲だけ探索したらok
C - Equilateral Triangle
ABC410(perf 1023, rating 575 -> 631)
A - G1
for文回しで数えるとOK
B - Reverse Proxy
シミュレーション問題。
if, elseで条件を分けてシミュレーションを行ったらAC
C - Rotatable Array
dequeの回転を用いたらWA
すべてのクエリを保存し、一気にすべてのクエリを処理したらAC
lazysegのアプローチと似てると考えると楽!
D - XOR Shortest Walk
XORでた!!!!
今回は前苦労していたorpathのXORバージョンと似ていました!
n, m <= 1000で計算量が少なかったので、すべての場合をsetで保存し、最小値を求めました