본문 바로가기
알고리즘 풀이/SW Expert Academy

[SWEA] 정식이의 은행업무 (python)

by char_lie 2023. 3. 31.
반응형

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

 

SW Expert Academy

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

swexpertacademy.com

정식이의 은행업무 문제

2진법의 숫자 중에 자리 수 하나를 바꾼 숫자를 10진법으로 바꾼 숫자들 중, 3진법의 숫자 중에 자리 수 하나를 바꾼 숫자의 10진법과 일치하는 것이 있는지 찾는 문제

구현 문제로 완전 탐색을 하면 된다.

⚙️ 내가 푼 정답 코드

T = int(input())
for case in range(1, T+1):
    b = input() # 2진수
    t = input() # 3진수
    ts = ['0', '1', '2'] # 3진수 모음
    bs = [] # 2진수를 10진수로 바꾼 값 모음
    for i in range(len(b)): # 가능한 2진수 찾기
        if b[i] == '0':
            temp = b[:i] + '1' + b[i+1:]
            bs.append(int(temp, 2)) # 10진수로 변환해서 모으기
        else:
            temp = b[:i] + '0' + b[i+1:]
            bs.append(int(temp, 2))
    for i in range(len(t)):
        for j in ts:
            if t[i] != j:
                temp = t[:i] + j + t[i+1:] # 3진수도 하나씩 찾아보자
                if int(temp, 3) in bs: # 3진수를 10진수로 바꿔서 2진수 10진수로 바꾼거에 있으면
                    print(f'#{case} {int(temp, 3)}') #정답

📌문제 접근 포인트

1. 2진법과 3진법 수를 변형 후 10진법으로 만들고 일치하는 숫자를 찾아야 한다. 3진법보단 2진법이 경우의 수가 더 적으니 2진법을 먼저 변환을 해주자.
2. 2진수를 한 칸씩 0 or 1의 변환을 해주고, 그때 변환한 숫자를 모아주자.
3. 3진수도 마찬가지로 하나씩 변환 해주고, 2진수의 모음 중에 3진수가 일치하는 게 있는지 체크해주자.
4. 있으면 그때 수를 출력하면 끝
반응형

댓글