practivceAlgorithm/swexpertacademy

[SWEA][Python] 4366 정식이의 은행업무

findTheValue 2021. 10. 8. 12:45

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}')