Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

그냥하는코딩

프로그래머스 2단계 - [2개 이하로 다른 비트] 본문

부스트캠프 준비기/코딩테스트 알고리즘

프로그래머스 2단계 - [2개 이하로 다른 비트]

UKkim 2021. 6. 21. 21:02

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

 

코딩테스트 연습 - 2개 이하로 다른 비트

 

programmers.co.kr

1. 문제이해

 - 이진법 변환

 - 이진법 크기 비교

 

2. 코드 작성

def solution(numbers):
    answer = []

    for number in numbers:
        byteNum = format(number, 'b')
        if byteNum.find('0') == -1:
            byteNum = '10' + byteNum[1:]
        elif byteNum[-1] == '0':
            byteNum = byteNum[:-1] + '1'
        else:
            li = byteNum.rsplit('01', 1)
            byteNum = '10'.join(li)

        answer.append(int(byteNum, 2))    
        
    return answer

※ 시간복잡도

len(numbers) * (find 함수 시간복잡도)

 

3. 풀이간 체크사항

 1) 01을 찾아 10으로 바꾸는 것이 가장 이상적인 방법

 2) 위 조건에서 발생가능한 예외조건 xxxx0 과 11111 케이스 나눠주기

 

4. 단위 기능 체크

# 이진수로 변환하기
byteNum = format(number, 'b')

# 10진수로 변환하기
int(byteNum, 2)

# 마지막 '01' '10'으로 바꾸기
li = byteNum.rsplit('01', 1)
byteNum = '10'.join(li)
Comments