AtCoder Beginner Contest 175 A〜C問題・情報技術者試験
前書き
AtCoder Beginner Contest 175 A〜C問題を解きました。
A問題
- 難易度:灰
- 時間:4分
愚直に場合分けしたほうが早いです。
S=input() if 'RRR' in S: print(3) elif 'RR' in S: print(2) elif 'R' in S: print(1) else: print(0)
B問題
- 難易度:灰
- 時間:12分
問題と数値の条件を見て全パターンを網羅が可能と判断しました。
N = int(input()) L = list(map(int,input().split())) count=0 for i in range(N): for j in range(i,N): for k in range(j,N): A,B,C = L[i],L[j],L[k] _max,_sum = max([A,B,C]),sum([A,B,C]) if A!=B and B!=C and A!=C: if _max<_sum-_max: count+=1 print(count)
C問題
- 難易度:茶
- 時間:55分(WA→AC)
考え方自体は間違っていなかったのですが、少量のWAに苦戦しました。
C問題は遅くても30分以内には解きたいのでダメですね。
アルゴリズムについてです。
- X≥0とする
- a = X // D→目的地の手前までたどり着ける回数
- K>a→目的地までたどり着ける→後で参照※1
- K=aの場合→目的地Xとa回動いた位置の差分(一番近づけたのがK=a)
- K
※1について
- a+1回動いた時の方が目的地Xに近い場合は a+=1
- 残り移動回数を( K-a )とする
- 残り移動回数が偶数の場合→目的地Xとa回動いた位置の差分(残りは行ったり来たりするだけ)
- 残り移動回数が奇数の場合→(1回の移動距離D - 目的地Xとa回動いた位置の差分)(残り1度の移動をどこかで消費しなければならない)
X,K,D=map(int,input().split()) X = abs(X) a = X//D if a<K: if abs(X-(a+1)*D)<abs(X-(a)*D):a+=1 if (K-a)%2==0: print(abs(X-(a)*D)) else: print(abs(abs(D)-abs(X-(a)*D))) elif a==K: print(abs(X-(a)*D)) else: print(abs(X-K*D))
※1の1の処理は不要でしたね。こちらはさらにシンプルです。
qiita.com
情報技術者試験の勉強
27 / 40問で正解率は67.5 % でした。
請負契約 vs 派遣契約 vs 準委任契約(SES)
- | 請負契約 | 派遣契約 | 準委任契約 |
契約内容 | 成果物の作成 | 労働者の派遣 | 労働者の提供 |
指揮命令権 | 受託者 | 委託者 | 受託者 |
受託責任 | 成果物の欠陥・損傷に対する修復・損害責任 | 無し | 技術者の能力を考えて通常期待される注意義務 |
成果物の著作権 | 受託者 | 委託者 | 委託者 |
報酬の支払い | 完成後 | 一定期間 | 一定期間 |
モジュール結合度
一般的にはモジュール結合度が弱いほどより良い設計であると言えます。
1弱い | データ結合 | 引数で単純なデータを渡すパターン |
2 | スタンプ結合 | 引数で構造体などのオブジェクトを渡すパターン |
3 | 制御結合 | 引数の種類によって、メソッドの内の処理が変わるパターン |
4 | 外部結合 | 単一のグローバルデータを参照しているパターン |
5 | 共通結合 | 複数のグローバルデータを参照しているパターン |
6 | 内容結合 | 他のオブジェクトの内部を参照しているパターン |