2진수는 1 shifting으로 비트체크 후 경우의 수를 후보군 set에 넣어두었고
3진수는 k를 인덱스의 역방향으로 설정하여 연산한 숫자가 후보군 안에 있는지 확인했습니다.
for test in range(1, int(input()) + 1):
binary, tri = input(), input()
init_binary, init_tri = int(binary, 2), int(tri, 3)
target_candidate = set()
for i in range(len(binary)):
if init_binary & (1 << i):
target_candidate.add(init_binary - (2 ** i))
else:
target_candidate.add(init_binary + (2 ** i))
answer = 0
for i in range(len(tri)):
k = len(tri) - i - 1
if answer: break
if tri[i] in '12':
for j in range(1, int(tri[i]) + 1):
cal_tri = init_tri - (3 ** k) * j
if cal_tri in target_candidate:
answer = cal_tri
break
if tri[i] in '01':
for j in range(1, 3 - int(tri[i])):
cal_tri = init_tri + (3 ** k) * j
if cal_tri in target_candidate:
answer = cal_tri
break
print(f'#{test} {answer}')
'practivceAlgorithm > swexpertacademy' 카테고리의 다른 글
[SWEA][Python] 5250 최소 비용 (0) | 2021.10.10 |
---|---|
[SWEA][Python] 5249 최소 신장 트리 (0) | 2021.10.10 |
[SWEA][Python] 2819 격자판의 숫자 이어붙이기 (0) | 2021.10.08 |
[SWEA][Python] 1970 쉬운 거스름돈 (0) | 2021.10.08 |
[SWEA][Python] 1861 정사각형방 (0) | 2021.10.08 |