Level 2. 2개 이하로 다른 비트

Pear_Mh·2021년 7월 21일
0

Programmers-Level 2.

목록 보기
29/40

2개 이하로 다른 비트

코딩테스트 연습 > 월간 코드 챌린지 시즌2 > 2개 이하로 다른 비트

https://programmers.co.kr/learn/courses/30/lessons/77885


문제 설명

# 문제 정리

- 입력: 양의 정수 리스트
- 과정:
  1. 앞자리 0을 포함한 이진화 bin(x)
  2. 짝수, 홀수를 구분하여 처리
     - 짝수일 경우, +=1
     - 홀수일 경우, 가장 뒤에 있는 01로 바꾼 뒤, 그다음 10으로 변환
  3. 10진수로 변환하여 출력

문제 풀이

# 1st trial
# Input value
numbers = [2,7]
#01
bin_num = []
#02
for b in numbers:
    bin_b = list('0'+format(b,'b')) #각 자리를 원소로 취급하여 변환하기 위한 리스트 화 및 앞자리 0 추가
    idx = ''.join(bin_b).rfind('0') # 가장 뒤에 위치한 0의 위치 반환 (rfind: 문자열의 마지막 발생의 위치를 반환)
    bin_b[idx] = '1' # 해당 위치값을 1로 변환
#03
    if b % 2 == 1: # 홀수 일 경우
        bin_b[idx+1] = '0' # 반환한 값의 다음 값을 0으로 치환
#04
    bin_num.append(int(''.join(bin_b),2)) # 리스트를 문자열로 변환한 뒤, 이진수를 십진수로 변환하여 빈 리스트에 삽입

bin_num

rfind()를 이용하여 뒷자리의 0값을 1로 변경한 뒤 홀수의 경우 그 다음값을 '0'으로 변환하는 방법을 이용하였습니다.


전체 코드

def solution(numbers):
    bin_num = []

    for b in numbers:
        bin_b = list('0'+format(b,'b'))
        idx = ''.join(bin_b).rfind('0')
        bin_b[idx] = '1'

        if b % 2 == 1:
            bin_b[idx+1] = '0' 
        
        bin_num.append(int(''.join(bin_b),2))
    return bin_num

# Code test
numbers = [2,7]
solution(numbers)
profile
Beyond the new era.

0개의 댓글

관련 채용 정보