https://school.programmers.co.kr/learn/courses/30/lessons/77885
처음 제출한 코드
def solution(numbers):
answer = []
for num in numbers:
binary = str(bin(num))[2:]
count = num + 1
while True:
count_bin = str(bin(count))[2:]
if len(count_bin) > len(binary):
binary = '0' * (len(count_bin) - len(binary)) + binary
else:
count_bin = '0' * (len(binary) - len(count_bin)) + count_bin
diff = 0
isTrue = False
for i in range(len(binary)):
if binary[i] != count_bin[i]:
diff += 1
if diff > 2:
isTrue = True
break
if isTrue == False:
answer.append(count)
break
count += 1
return answer
numbers의 길이가 10만 이라는 것을 알았지만 한번 시도해보았으나...
테케 14, 15에서 떨어지고 말았다.
다른 방법이 필요했지만 딱히 떠오르는 생각이 없었다.
def solution(numbers):
answer = []
for num in numbers:
b = str(bin(num))[2:]
if num % 2 == 0:
arr = list(b)
arr[-1] = '1'
z =''.join(arr)
z = int(z,2)
answer.append(z)
else:
b = '0' + b
idx = b.rfind('0')
arr = list(b)
arr[idx] = '1'
arr[idx+1] = '0'
z =''.join(arr)
z = int(z,2)
answer.append(z)
return answer
그러다 발견한 해답
만일 짝수일 경우 맨 뒤에 0을 1로 바꿔주고
홀수인 경우 맨 뒤에오는 0을 1로, 그 오른쪽의 1을 0으로 바꿔주면 된다...
나이가 먹으니 머리가 굳었다는게 절실히 느껴진다...
'알고리즘' 카테고리의 다른 글
프로그래머스)문자열 나누기 (0) | 2023.02.19 |
---|---|
백준)영역구하기 (0) | 2023.02.18 |
프로그래머스)[1차] 프렌즈 4블록 (0) | 2023.02.16 |
프로그래머스)[3]차 n진수 게임-python (0) | 2023.02.16 |
*프로그래머스)거리두기 확인하기 (0) | 2023.02.16 |