코딩테스트/SWExpertAcademy

정식이의 은행업무 Python(SW Expert Academy, SWEA)

멍토 2020. 6. 25.

난이도 : D4

문제번호 : 4366

문제 주소 및 출처입니다.

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd&categoryId=AWMeRLz6kC0DFAXd&categoryType=CODE

 

SW Expert Academy

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

swexpertacademy.com


목차

1. 문제 설명

2. 문제 해석

3. 소스 코드


1. 문제 설명

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

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

하지만 다행스럽게도 정식이는 평소 금액을 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
1010
212
#1 14

2. 문제풀이

2진수와 3진수가 1비트씩 바뀌었기때문에 바뀔수 있는 경우의 수를 만들었다.

이후 변환한 진수를 10진수로 바꾸어 비교하였고 일치하는 값이 있다면 그것을 정답으로 출력하였다.


3. 소스코드

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#D4 4366 정식이의 은행업무
 
#2진수와 3진수를 비교
def equleCheck(a, b):
    num_a = 0
    num_b = 0
    k = 0
    for i in range(len(a)-1-1-1):
        num_a += int(a[i])*(2**k)
        k+=1
    k = 0
    for i in range(len(b)-1-1-1):
        num_b += int(b[i])*(3**k)
        k+=1
    if num_a == num_b:
        return True, num_a
    return False, num_a
 
= int(input())
for t in range(1, T + 1):
    num_2 = list(input())
    num_3 = list(input())
    list1 = []
    list2 = []
    #2진수가 틀린 경우의수 찾기
    for i in range(len(num_2)):
        temp = num_2[:]
        if temp[i] == '0':  temp[i] = '1'
        else:   temp[i] = '0'
        list1.append(''.join(temp))
    #진수가 틀린 경우의 수 찾기
    for i in range(len(num_3)):
        temp = num_3[:]
        if temp[i] == '0':
            temp[i] = '1'
            list2.append(''.join(temp))
            temp[i] = '2'
            list2.append(''.join(temp))
        elif temp[i] == '1':
            temp[i] = '0'
            list2.append(''.join(temp))
            temp[i] = '2'
            list2.append(''.join(temp))
        else:
            temp[i] = '0'
            list2.append(''.join(temp))
            temp[i] = '1'
            list2.append(''.join(temp))
 
    result = 0
    #경우의 수를 각각 비교하면서 찾기
    for a in list1:
        for b in list2:
            check, result = equleCheck(a, b)
            if check:
                break
        else:
            continue
        break
    print('#{} {}'.format(t, result))

댓글

💲 광고입니다.