728x90

문제 

주어진 리스트의 각 숫자를 2진법으로 변환한 후, 뒤에서부터 비트를 읽어 다시 10진법으로 변환하는 과정입니다. 이를 해결하기 위한 파이썬 코드는 다음과 같습니다. 

단계 설명:

  1. 리스트의 각 숫자를 5자리 2진수로 변환합니다.
  2. 각 숫자의 2진수 값을 뒤에서부터 하나씩 모아 새로운 2진수를 만듭니다.
  3. 그 결과를 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

+ Recent posts