Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

AtCoder 修行日記#48

48日目
ABCのB問題を実施中。

勉強用のコンテンツはここから。
https://kenkoooo.com/atcoder/#/table/

進捗と一言感想

[B問題] 1問(残り7問)

ABC040:□□□□□

平方根のスタートで詰まってました…。
効率的に解くなら…と、nを2で割った時の計算範囲にしてましたが、
数が多い場合、単純に割ると最適値になる計算範囲がずれるようでした。要復習…。

import math
n = int(input())
 
answer = None
for height in range(1,int(math.sqrt(n))+1):
  width = n//height
  remainder = n - width * height
  if answer is None :
    answer = abs(width - height) +  remainder
  else :
    answer = min(answer, abs(width - height) +  remainder)
  
print(answer)

[C問題] 1問(残り156問)

ABC174: Repsept

↓最初に作ったやつ。10**6のオーダーなので行けると思ってたのですが、時間切れになり断念…。
敗因は文字列変換を入れたことでした。これによって倍になった可能性があります。

k = int(input())
 
check = False
if k%2 == 0:
  check = True
  
if check == False:
  check_s = "7"
  while(True):
    if int(check_s)%k == 0:
      break
    check_s += "7"
  print(len(check_s))
else :
  print(-1)

シンプルだったこちらを参考に修正。
文字列で計算するのではなく、単純に数値でできるようにしておくことが反省点でした。
Submission #15728077 - AtCoder Beginner Contest 174

k = int(input())

answer = -1
x = 7
for index in range(k) :
  if x % k == 0:
    answer = index + 1
    break
  x = (10 * x + 7) % k
  
print(answer)
目標
  • まず、今年中に茶色コーダー
学習方針

以上。