728x90
문제
주어진 리스트의 각 숫자를 2진법으로 변환한 후, 뒤에서부터 비트를 읽어 다시 10진법으로 변환하는 과정입니다. 이를 해결하기 위한 파이썬 코드는 다음과 같습니다.
단계 설명:
- 리스트의 각 숫자를 5자리 2진수로 변환합니다.
- 각 숫자의 2진수 값을 뒤에서부터 하나씩 모아 새로운 2진수를 만듭니다.
- 그 결과를 10진수로 변환합니다.
def binary_transformation(nums):
# 각 숫자를 5자리 이진수로 변환하여 리스트로 저장
binaries = [] # 이진수를 저장할 리스트
for num in nums:
binary_str = format(num, '05b') # num을 5자리 이진수로 변환
binaries.append(binary_str) # 변환된 이진수를 리스트에 추가
# 뒤에서부터 비트를 모아서 새로운 이진수 만들기
new_binary = ''
for i in range(5): # 5자리 이진수이므로 0부터 4까지
new_binary += binaries[-(i + 1)][i]
# 최종 이진수를 10진수로 변환
result = int(new_binary, 2)
return result
# 예시 실행
nums = [5, 27, 9, 0, 31]
result = binary_transformation(nums)
print("Result:", result)
고정된 5자리수를 하기 때문에 bin() 보다 format(num, '05b') 사용해서 5자리 이진수로 변환한 후 그 뒤에서부터 비트를 조합.
- 이진수 변환:
- format(num, '05b')을 사용하여 숫자를 5자리 이진수 문자열로 변환합니다.
- 결과: ['00101', '11011', '01001', '00000', '11111'].
- 뒤에서부터 비트 모으기:
- for i in range(5) 루프를 사용하여, 각 이진수에서 필요한 비트를 선택합니다.
- binaries[-(i + 1)][i]는 뒤에서부터 i번째 이진수를 선택하고, 그 위치의 비트를 추출합니다.
- binaries[-1] → '11111'에서 i=0일 때 비트 1을 추출.
- binaries[-2] → '00000'에서 i=1일 때 비트 0을 추출.
- binaries[-3] → '01001'에서 i=2일 때 비트 0을 추출.
- binaries[-4] → '11011'에서 i=3일 때 비트 1을 추출.
- binaries[-5] → '00101'에서 i=4일 때 비트 1을 추출.
- 최종적으로 새로운 이진수 문자열 10011을 얻습니다.
- 이진수 -> 10진수 변환:
- int(new_binary, 2)를 사용하여 10011을 10진수로 변환합니다. 결과는 19입니다.
Result: 19
728x90
'CodingTest > 테스트문제풀이' 카테고리의 다른 글
코딩테스트 문제 풀이 - 9월 7일 테스트 (0) | 2024.09.07 |
---|