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
쉬운 문제여따
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을 추가했다.