출처
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWMeRLz6kC0DFAXd&categoryId=AWMeRLz6kC0DFAXd&categoryType=CODE |
문제
삼성은행의 신입사원 정식이는 실수를 저질렀다.
은행 업무가 마감되기 직전인 지금, 송금할 금액을 까먹고 말았다.
하지만 다행스럽게도 정식이는 평소 금액을 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 // Test Case 수 1010 // Test Case 1, 2진수 212 // Test Case 1, 3진수 |
#1 14 |
풀이
완전 탐색으로 문제를 해결하였다. 다루기 편하도록 모두 str 형식으로 받아와 나눠서 사용할 수 있도록 하였고 마지막에는 int를 통해 2진법, 3진법을 10진수로 변환하여 비교하였다.
대략적인 방법을 좀더 자세히 설명하자면 예시 테스트 케이스를 바탕으로 설명하겠다.
이진법 1010을 가지고 가능한 모든 경우의 수를 따지면 첫번째 자리가 0,1 두번째 자리 0,1 세번째 자리 0,1 네번째 자리 0,1 로 총 8가지이다. 그래서 반복문을 길이 *2만큼 반복시키며
각 자리의 인덱스는 첫번째 자리 인덱스 0,1 두번쨰 자리 인덱스 2,3 세번째 자리 인덱스 4,5 네번째 자리 인덱스 6,7이 된다. 이것은 바꿔 말하면 반복 숫자 i 를 2진법의 수인 2로 나눈 몫이 되고 이에 할당되는 값은 0과 1이기에 값은 나머지가 된다.
따라서 길이 *2 만큼 반복하며 각 자리별로 0,1을 할당해주면 끝!
코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
T = int(input())
for t in range(T):
two = list(input())
three = list(input())
check = 0 # 이중 for문 탈출 parameter
for i in range(len(two)*2): # 이진법 0,1 스위칭 되므로 길이 *2 만큼 반복
copy_two = two[:]
copy_two[i//2] = str(i % 2)
a = ''.join(copy_two)
for j in range(len(three)*3): # 삼진법 0,1,2 스위칭 길이 *3 만큼 반복
copy_three = three[:]
copy_three[j//3] = str(j % 3)
b = ''.join(copy_three)
if int(a,2) == int(b,3):
print('#{} {}'.format(t+1,int(a,2)))
check = 1
break
if check == 1:
break
|
'코딩 테스트 > SW 아카데미' 카테고리의 다른 글
[모의 SW 역량 테스트] 2115 벌꿀 채취 (Python) (0) | 2020.03.09 |
---|---|
[SWEA] D4 1238 Contact (Python) (0) | 2020.03.09 |
[모의 SW 역량 테스트] 5656 벽돌 깨기 (Python) (0) | 2020.03.07 |
[모의 SW 역량테스트] 1949 등산로 조성 (Python) (0) | 2020.03.06 |
[SWEA] D4 3752 가능한 시험 점수 (Python) (0) | 2020.03.05 |