[SWEA] 4366. 鄭植の銀行業務[D 4]
9011 ワード
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd&categoryId=AWMeRLz6kC0DFAXd&categoryType=CODE&problemTitle=%EC%A0%95%EC%8B%9D%EC%9D%B4%EC%9D%98&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=&pageSize=10&pageIndex=1
入力したバイナリ数をxor演算でfor文に変換します.
そして10進数に変更して3進数に変更します.
3進数に変更した値を既存の3進数値と文字列ごとに比較した場合、差が1つしか現れない場合は、対応する10進数値が出力されます.
📖 に答える
入力したバイナリ数をxor演算でfor文に変換します.
そして10進数に変更して3進数に変更します.
3進数に変更した値を既存の3進数値と文字列ごとに比較した場合、差が1つしか現れない場合は、対応する10進数値が出力されます.
📒 コード#コード#
def binary_to_decimal(): # 2진수를 10진수로 변경(string => int)
cnt = 1
decimal = 0
for c in two[::-1]:
decimal += cnt * c
cnt *= 2
return decimal
def decimal_to_ternary(decimal): # 10진수를 3진수 변경(int => string)
result = ''
while decimal >= 3:
result = str(decimal % 3) + result
decimal //= 3
if decimal:
result = str(decimal) + result
return result
def func():
for i in range(len(two)):
two[i] = two[i] ^ 1 # 2진수를 한 자리씩 변경
decimal = binary_to_decimal() # 2진수를 10진수로 변경
ans = decimal_to_ternary(decimal) # 10진수을 3진수으로 변경
if len(ans) == len(three): # 서로 길이가 같은 지 확인
cnt = 0
for j in range(len(three)): # 다른 개수가 하나인지 확인
if cnt == 2: # 다른 개수가 2이상이면 break
break
if ans[j] != three[j]:
cnt += 1
else: # 다른 개수가 하나일 때 return
if cnt == 1:
return decimal
two[i] = two[i] ^ 1 # 바꿔준 자리를 원상복구
for tc in range(1, 1 + int(input())):
two = list(map(int, input()))
three = input()
print(f'#{tc} {func()}')
🔍 結果
Reference
この問題について([SWEA] 4366. 鄭植の銀行業務[D 4]), 我々は、より多くの情報をここで見つけました https://velog.io/@yunhlim/SWEA-4366.-정식이의-은행업무-D4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol