SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
문제
삼성은행의 신입사원 정식이는 실수를 저질렀다.
은행 업무가 마감되기 직전인 지금, 송금할 금액을 까먹고 말았다.
하지만 다행스럽게도 정식이는 평소 금액을 2진수와 3진수의 두 가지 형태로 기억하고 다니며, 기억이 명확하지 않은 지금조차 2진수와 3진수 각각의 수에서 단 한 자리만을 잘못 기억하고 있다는 것만은 알고 있다.
예를 들어 현재 기억이 2진수 1010과 3진수 212을 말해주고 있다면 이는 14의 2진수인 1110와 14의 3진수인 112를 잘못 기억한 것이라고 추측할 수 있다.
정식이는 실수를 바로잡기 위해 당신에게 부탁을 하였다.
정식이가 송금액을 추측하는 프로그램을 만들어주자.
( 단, 2진수와 3진수의 값은 무조건 1자리씩 틀리다. 추측할 수 없는 경우는 주어지지 않는다. )
입력
10개 이하의 테스트 케이스가 주어진다.
첫 번째 줄에는 테스트케이스의 개수가 주어진다.
하나의 케이스는 두 줄로 되어있다.
각 케이스의 첫 번째 줄은 정식이가 기억하는 송금액의 2진수 표현, 두 번째 줄은 송금액의 3진수 표현이 주어진다.
(3 ≤ 2진수, 3진수의 자릿수 <40)
출력
원래 송금하기로 하였던 금액을 케이스마다 한 줄에 하나씩 출력한다.
풀이
- 정식이가 기억하고 있는 2진수와 3진수에서 한자리수만 틀린 것이므로 먼저 2진수의 한자리수를 변경했을 때 가능한 값을 십진수로 표현하여 two_list에 담아주었다.
- 다음으로 3진수를 바꿔야 할 차례인데 3진수를 한자리수씩 바꿔주면서 바꾼 값이 two_list에 있는지 확인하고 있다면 거기서 break를 하여 시간낭비하지 않는다.
- n진수를 10진수로 바꾸는 방법으로 int('변경할 수',n)을 사용했다.
코드
# 3진수를 10진수로 변경하기
# 2진수 리스트에 존재하면 1을 아니라면 0을 반환한다.
def check(lst):
temp = int(''.join(lst), 3)
if temp in two_list:
return 1
return 0
T = int(input())
for test_case in range(1, T + 1):
two = list(input())
three = list(input())
two_list = []
# 가능한 이진수 구하기
for i in range(len(two)):
if two[i] == '1':
two[i] = '0'
two_list.append(int(''.join(two), 2))
two[i] = '1'
else:
two[i] = '1'
two_list.append(int(''.join(two), 2))
two[i] = '0'
# 3진수의 자릿수 변경하기
for i in range(len(three)):
if three[i] == '0':
three[i] = '1'
if check(three):
break
three[i] = '2'
if check(three):
break
three[i] = '0'
elif three[i] == '1':
three[i] = '0'
if check(three):
break
three[i] = '2'
if check(three):
break
three[i] = '1'
else:
three[i] = '1'
if check(three):
break
three[i] = '0'
if check(three):
break
three[i] = '2'
rlt = int(''.join(three), 3)
print(f'#{test_case} {rlt}')
'알고리즘 문제풀이 > SWEA' 카테고리의 다른 글
[SWEA 5250번] 최소 비용 - 파이썬(python) (0) | 2023.03.31 |
---|---|
[SWEA 13165번] 최소 이동 거리 - 파이썬(python) (0) | 2023.03.31 |
[SWEA 14160번] 전기버스2 - 파이썬(python) (0) | 2023.03.30 |
[SWEA 5215번] 햄버거 다이어트 - 파이썬(python) (0) | 2023.03.30 |
[SWEA 2806번] N-Queen - 파이썬(python) (0) | 2023.03.30 |
댓글