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分以内には解きたいのでダメですね。

アルゴリズムについてです。

  1. X≥0とする
  2. a = X // D→目的地の手前までたどり着ける回数
  3. K>a→目的地までたどり着ける→後で参照※1
  4. K=aの場合→目的地Xとa回動いた位置の差分(一番近づけたのがK=a)
  5. K

※1について

  1. a+1回動いた時の方が目的地Xに近い場合は a+=1
  2. 残り移動回数を( K-a )とする
  3. 残り移動回数が偶数の場合→目的地Xとa回動いた位置の差分(残りは行ったり来たりするだけ)
  4. 残り移動回数が奇数の場合→(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)

akira2kun.hatenablog.com

- 請負契約 派遣契約 準委任契約
契約内容 成果物の作成 労働者の派遣 労働者の提供
指揮命令権 受託者 委託者 受託者
受託責任 成果物の欠陥・損傷に対する修復・損害責任 無し 技術者の能力を考えて通常期待される注意義務
成果物の著作権 受託者 委託者 委託者
報酬の支払い 完成後 一定期間 一定期間

モジュール結合度

一般的にはモジュール結合度が弱いほどより良い設計であると言えます。

qiita.com

1弱い データ結合 引数で単純なデータを渡すパターン
2 スタンプ結合 引数で構造体などのオブジェクトを渡すパターン
3 制御結合 引数の種類によって、メソッドの内の処理が変わるパターン
4 外部結合 単一のグローバルデータを参照しているパターン
5 共通結合 複数のグローバルデータを参照しているパターン
6 内容結合 他のオブジェクトの内部を参照しているパターン