16953. A → B
質問が知りたい場合は、下のリンクをクリックしてください!
問題の本文
の小数に2を乗じて、あるいは大きい数の中から1を減らして、2を除いて、もっと速いことができますか? 2に分け、末尾が1の場合は1を抜きます. 2 2を2で割らなければ整数Aは数えられないと判断し、−1を出力する.
時間制限は2秒!価格は10億ウォン. O(logn)の複雑さは解決できるでしょうか?
まだまだ足りない
方法が少し残念だったり、複雑度計算が間違っていたりします.
コードをよく理解していないかもしれません.
コメントに自由に意見や教えを残していただければ
私の成長に大きな助けになります:)
読んでくれてありがとう!
問題の本文
アクセスプロセス
に答える
import sys
A, B = map(int, sys.stdin.readline().split())
cnt = 0
while B != A: # B가 A와 같아지거나, 혹은 조건을 만족시키지 못하게 된다면 탈출한다.
if cnt == -1: # 탈출
break
if str(B)[-1] == '1': # 마지막 숫자가 1인 경우
B //= 10 # 1을 제거해주어야 하는데, 문자열로 처리해서 슬라이싱할 수도 있지만
cnt += 1 # 1의 자리를 없애는 것이기에 10으로 나눈 몫으로 처리할 수도 있다.
continue
if B > 0 and B % 2 == 0: # 0보다 크면서 2로 나누어떨어지는 경우 2로 나누어준다.
B //= 2 # 0보다 크다라는 조건을 넣은 이유는 B가 1이 될 때 B > 0 조건이 없다면
cnt += 1 # 위의 조건문에서 1이 없어지게 되고, 0이 되어서 B % 2 == 0의 조건에서 무한루프가 생긴다.
continue
cnt = -1
print(cnt + 1) if cnt > 0 else print(-1) # 불필요하게 쓴 것 같다. 처음부터 cnt에 1을 할당했다면 이렇게까진 하지 않아도 됬을텐데..
まだまだ足りない
方法が少し残念だったり、複雑度計算が間違っていたりします.
コードをよく理解していないかもしれません.
コメントに自由に意見や教えを残していただければ
私の成長に大きな助けになります:)
読んでくれてありがとう!
Reference
この問題について(16953. A → B), 我々は、より多くの情報をここで見つけました https://velog.io/@applevalley/16953.-A-Bテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol