티스토리 뷰

● 문제 링크

 

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

 

programmers.co.kr


● 문제 설명


● 문제 해결 방향

처음 접근은 while을 계속 돌리면서 변화하는 자리 수가 2 이하일 때 break를 거는 방식으로 코드를 짰지만

테스트 과정에서 시간초과가 많이 걸려 다음과 같은 규칙을 사용했습니다.

 

한자리만 바뀌는 경우 : 짝수인 경우 --> 2**0 자리 0을 1로 바꿈

두 자리가 바뀌는 경우 : 홀수인 경우 --> 가장 낮은 자리의 수를 1로 바꾸고, [index + 1]에 해당하는 숫자를 0으로 바꿈


● 문제 해결 코드

def solution(numbers):
    answer = []
    for n in numbers :
        if n == 0 :
            answer.append(1)
            continue
        bin_n = list(bin(n)[2:])
        if '0' not in bin_n:
            bin_n = ['1', '0'] + bin_n[1:]
        else:
            for i in range(len(bin_n)-1, 0, -1):
                if bin_n[i] == '0' :
                    bin_n[i] = '1'
                    if i != len(bin_n)-1 :
                        bin_n[i + 1] = '0'
                    break
        answer.append(int(''.join(bin_n), 2))
    return answer

참고할 만한 다른 코드

이 코드의 경우

 

서로 다른 비트를 다루는 문제라 비트 연산자를 사용한 코드.

문제를 접근할때 2진수로 바꾸어야 한다는 생각만 했지만

잘 사용하지 않아서 인지 비트 연산자는 전혀 생각 못했다...

 

너무나도 신박하고 문제에 대한 제대로 된 접근인 것 같다.


● 알게 된 것 / 아쉬운 점

비트 연산자를 배우고 제대로 써본 적이 한 번도 없었는데

이렇게 사용되는 모습을 보고 한 번 더 기억을 환기시킬 수 있었다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함