본문 바로가기
Develop/Python + SWEA

[SW Expert Academy] 4366. 정식이의 은행업무

by Tarra 2022. 3. 25.

4366. 정식이의 은행업무


문제)

 

삼성은행의 신입사원 정식이는 실수를 저질렀다.

은행 업무가 마감되기 직전인 지금, 송금할 금액을 까먹고 말았다.

하지만 다행스럽게도 정식이는 평소 금액을 2진수와 3진수의 두 가지 형태로 기억하고 다니며, 기억이 명확하지 않은 지금조차 2진수와 3진수 각각의 수에서 단 한 자리만을 잘못 기억하고 있다는 것만은 알고 있다. 

예를 들어 현재 기억이 2진수 1010과 3진수 212을 말해주고 있다면 이는 14의 2진수인 1110와 14의 3진수인 112를 잘못 기억한 것이라고 추측할 수 있다.

정식이는 실수를 바로잡기 위해 당신에게 부탁을 하였다.

정식이가 송금액을 추측하는 프로그램을 만들어주자.

( 단, 2진수와 3진수의 값은 무조건 1자리씩 틀리다.  추측할 수 없는 경우는 주어지지 않는다. )

 

 

 

[입력]

10개 이하의 테스트 케이스가 주어진다.

첫 번째 줄에는 테스트케이스의 개수가 주어진다.

하나의 케이스는 두 줄로 되어있다.

각 케이스의 첫 번째 줄은 정식이가 기억하는 송금액의 2진수 표현, 두 번째 줄은 송금액의 3진수 표현이 주어진다.  

(3 ≤ 2진수, 3진수의 자릿수 <40)

 

 



[출력]

원래 송금하기로 하였던 금액을 케이스마다 한 줄에 하나씩 출력한다.

 

 

 

풀이)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import copy
 
= int(input())
for _ in range(T):
# 일단 for문으로 풀어보자.
    # 숫자를 하나씩만 바꿔 나올 수 있는 모든 2진수
    n = list(input())
    ln = len(n)
    li_n = set()
    for i in range(ln):
        # 할당을 통한 원본의 변환을 막기 위해
        a = copy.deepcopy(n)
        for j in range(2):
            a[i] = str(j)
            li_n.add(int("".join(a), 2))
 
    # 숫자를 하나씩만 바꿔 나올 수 있는 모든 3진수
    m = list(input())
    lm = len(m)
    li_m = set()
    for i in range(lm):
        b = copy.deepcopy(m)
        for j in range(3):
            b[i] = str(j)
            li_m.add(int("".join(b), 3))
 
    for i in li_n:
        if i in li_m:
            print(f"#{_ + 1}",i)
            break
cs

문제 출처 : https://swexpertacademy.com/main/main.do

 

SW Expert Academy

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

swexpertacademy.com

※ SW Expert 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.

학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.