프로그래머스/LV2

[프로그래머스 Lv2,python] - 2개 이하로 다른 비트

chyam_eun 2025. 2. 6. 10:08

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

def binary(n): # 2진법으로 변환
    st=''
    while(n>0):
        st+=str(n%2)
        n//=2
    st=st[::-1]
    return st

def trans(n): # 10진법으로 변환
    n=n[::-1]
    su=0
    for i in range(len(n)):
        if n[i]=="1":
            su+=2**i
    return su

def solution(numbers):
    answer = []
    for num in numbers:
        p=binary(num) 
        if num%2==0: # 짝수일때는 그다음 수
            answer.append(num+1)
        else: # 홀수일때
            if p[0]=="1": # 앞이 1이면 0추가해줘서 글자수 맞춰주기
                p="0"+p
            p=list(p) # 리스트로 접근
            for i in range(len(p)-1,-1,-1):
                if p[i]=="0": # 뒤에서부터 먼저 나온 0을 1로 바꿔주고 그 뒤의 1을 0으로 바꾸기
                    p[i]="1"
                    p[i+1]="0"
                    break
            p="".join(p) # 문자열로 바꿔주기
            su=trans(p)
            answer.append(su)
    return answer

 

아래는 시간초과가 떴던 처음 코드이다. 

def binary(n):
    st=''
    while(n>0):
        st+=str(n%2)
        n//=2
    st=st[::-1]
    return st

def compare(a,b):
    cnt=0
    if len(a)<len(b):
        a="0"+a
    for i in range(len(a)):
        if a[i]!=b[i]:
            cnt+=1
    return cnt

def solution(numbers):
    answer = []
    for num in numbers:
        p=binary(num)
        while(1):
            num+=1
            comp=binary(num)
            cnt=compare(p,comp)
            if cnt<=2:
                answer.append(num)
                break
    return answer