프로그래머스 월간 코드 챌린지 시즌2 파이썬 문제풀이(2)

Dana·2021년 5월 24일
0

알고리즘

목록 보기
7/8

1. 약수의 개수와 덧셈

def solution(left, right):
    answer = 0
    for num in range(left, right+1):
        cnt = 0
        for i in range(1, num+1):
            if num % i ==0:
                cnt +=1
        if cnt % 2 ==0:
            answer += num
        else:
            answer -= num
    return answer

쉬운 문제여따

2. 2개 이하로 다른 비트

def solution(numbers):
    answer = []
    for num in numbers:
        if num % 2 == 0:
            answer.append(num + 1)
        else:
            n1 = str(format(num, 'b'))
            n1 = '0' + n1
            n1 = list(n1)
            for i in range(len(n1)-1, -1, -1):
                if n1[i] == '0':
                    n1[i] = '1'
                    n1[i+1] = '0'
                    break
            n2 = "".join(n1)
            n2 = int(n2, 2)
            answer.append(n2)
    return answer

처음에는 그냥 1씩 증가하면서 다른 비트가 2개 이하인 수를 찾는 방법으로 풀었다. 그런데 시간초과가 몇 개 나와서 방법을 바꿔야겠다고 생각했고, 일정한 규칙을 찾을 수 있었다.(사실 규칙이라 하기도 뭐한 당연한 것이긴 하다)
짝수일 경우에는 가장 아래자리 비트가 0이므로 1만 더해주면 되고, 홀수일 경우에는 가장 아래자리부터 0이 나올때까지 검사해서 먼저 나오는 0을 1로 바꾸고 그 바로 아래자리수를 0으로 바꾸는 것이다. 이 때 1로만 이루어진 수 일수도 있으므로 가장 첫번째 비트에 0을 추가했다.

0개의 댓글