For Programmer

SWEA 4366번 파이썬 문제풀이(정식이의 은행 업무) 본문

코팅테스트/백준 문제 모음

SWEA 4366번 파이썬 문제풀이(정식이의 은행 업무)

유지광이 2022. 3. 25. 16:52
728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd 

 

SW Expert Academy

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

swexpertacademy.com

 


이 문제는 각 자리수를 돌면서 현재와 다른 값(예를 들어 첫번째 자리가 0 이면 2진수는 1로 3진수는 1 또는 2로 바꾸어 보며) 모든 자리수를 해당방식으로 검사하여 10진수로 변환하여 그중 공통된 한개만 뽑아내는 식으로 처리하였다.) 뽑아 낼때는 set의 교집합 연산자를 이용하였다.

# 입력받은 해당 진수의 값을 10진수로 변환
def convert(num, b):
    return int(num, base=b)


# 각 자리수를 바꿔 검사해보는 함수
def check(bit, b, order):
    temp_bit = list(bit)

    for i in range(len(bit)):
        init = temp_bit[i]
        for j in range(b):
            if temp_bit[i] == str(j):
                for k in range(b):
                    if str(j) == str(k):
                        continue
                    temp_bit[i] = str(k)
                    result[order].add(convert(''.join(temp_bit), b))
        temp_bit[i] = init


T = int(input())

for tc in range(1, T + 1):
    bit = input()  # 2진수 입력
    three_bit = input()  # 3진수 입력
    result = [set(), set()]  # 각진수의 자리수를 바꿔보며 10진수를 저장할 set 2개를 리스트에 저장
    check(bit, 2, 0)  # 2진수 변환
    check(three_bit, 3, 1)  # 3진수 변환

    print(f'#{tc}', *result[0] & result[1])  # 두개의 교집합을 출력
728x90
Comments