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
T = 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 아카데미는 원칙적으로 문제를 무단 복제하는 것을 금지합니다.
학습용으로 문제를 가져왔으나, 문제가 될 시 수정 및 삭제하겠습니다.
'Develop > Python + SWEA' 카테고리의 다른 글
[SW Expert Academy] 5188. 최소합 (0) | 2022.03.29 |
---|---|
[SW Expert Academy] 4615. 오셀로 게임 (0) | 2022.03.25 |
[SW Expert Academy] 10726. 이진수 표현 (0) | 2022.03.25 |
[SW Expert Academy] 5186. 이진수2 (0) | 2022.03.24 |
[SW Expert Academy] 5185. 이진수 (0) | 2022.03.24 |