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. 5. 22. 16:22

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

 

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

 

programmers.co.kr

1. 문제이해

 1) 이진법 구하기

 2) 2진법에서 해당 숫자보다 큰 숫자중 XOR한 값에 1의 갯수가 2이하인 수중 가장 작은 수

  - 해당 숫자보다 클 것

  - XOR 한 값에 1의 갯수가 2개 이하인 수

  - 그 중 가장 작은 수

 3) 시간 복잡도를 고려한 설계

  - 2) 의 내용을 만족하는 숫자는 마지막에 나오는 01을 10으로 변경하는 것

  - 위 내용을 위해 3가지 케이스로 나누어 생각 (0이 없는경우, 0이 마지막에 있는경우, 그 외)

 

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

※ 시간복잡도

O(n)

 

3. 풀이간 체크사항

 1) 인덱스 값 찾기 : str.find('A')

 2) 뒤에서부터 문자열 replace 하기

li = byteNum.rsplit(oldStr, changeCount)
byteNum = newStr.join(li)

 3) 문자열 이진수를 10진수 숫자로 변환하기

int('1001', 2) # 9

4) 숫자를 이진수로 변경하기 (0b 가 생략되어 나온다.)

byteNum = format(8, 'b') # 1000
Comments