본문 바로가기
ALGORITHM/SW Expert Academy

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

by 안녕나는현서 2021. 10. 8.
728x90

📌 문제

https://swexpertacademy.com/main/main.do

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

 

📌 문제 접근 방법

  1. 2진수가 0과 1의 경우의 수밖에 없으므로 2진수를 하나씩 변환시켜서 그 수를 3진수로 변환시켰을 때 틀린 자리의 개수를 확인한다.
  2. 2진수의 맨 처음에는 0이 올 수 없으므로 2번째 자리부터 변환한다.

 

📌 코드

import sys
sys.stdin = open('input.txt')

def bin_to_3(bin_list):
    # 10진수 변환
    dec_num = 0
    for i in range(len(bin_list)):
        dec_num += int(bin_list[i]) * 2**(len(bin_list)-1-i)
    
    answer = dec_num

    # 3진수 변환
    num3 = []
    while dec_num:
        num3.append(dec_num%3)
        dec_num //= 3

    num3 = num3[::-1]
    
    # 3진수와 비교
    if len(num3) != len(cash_3):
        return 0

    cnt = 0
    for j in range(len(num3)):
        if num3[j] != int(cash_3[j]):
            cnt += 1
        
        if cnt > 1:
            return 0
    
    if cnt == 1:
        return answer
    
    return 0


T = int(input())

for t in range(1, T+1):
    cash_2 = list(input())
    cash_3 = list(input())

    for i in range(1, len(cash_2)):
        if cash_2[i] == '0':
            cash_2[i] = 1
            temp = bin_to_3(cash_2)
            cash_2[i] = 0
        else:
            cash_2[i] = 0
            temp = bin_to_3(cash_2)
            cash_2[i] = 1
        
        if temp:
            break
    
    print('#{} {}'.format(t, temp))
728x90

댓글