728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/77885?language=python3#
최종 코드
def solution(numbers):
answer = []
for num in numbers:
num = int(num)
new_num = bin(num+1)[2:]
bin_num = bin(num)[2:].zfill(len(new_num))
cnt = 0
for i in range(len(bin_num)):
if bin_num[i] == new_num[i]: continue
cnt += 1
if cnt > 2: break
else:
answer.append(int(new_num, 2))
continue
new_num = new_num[:i] + bin_num[i:]
answer.append(int(new_num, 2))
return answer
풀이 과정
풀이 시간 35분
예제 테스트에 통과해서 채점을 해보니 이상하게도 7, 8, 9번이 런타임 에러가 났다.
테스트케이스에 최소, 최댓값을 넣어봤는데도 정답이 잘 나와서 왜 런타임 에러가 나는지 감이 오질 않았다.
질문하기를 참고해보니 입력값을 받아올 때도 한 번 더 int형으로 치환해야 한다고 해서 적용해보니 통과할 수 있었다.
그렇지만 이미 입력값이 0에서 10^15 사이의 정수라고 되어 있어서 왜인지는 여전히 잘 모르겠다,,
def solution(numbers):
answer = []
for num in numbers:
num = int(num)
#입력값 num보다 1 더 큰 수를 2진수로 바꾼 값
new_num = bin(num+1)[2:]
#입력값 num을 2진수로 바꾼 값
bin_num = bin(num)[2:].zfill(len(new_num))
#서로 다른 비트의 수 카운팅
cnt = 0
#new_num과 bin_num의 비트 비교하기
for i in range(len(bin_num)):
if bin_num[i] == new_num[i]: continue
#i번째 비트가 다른 경우, cnt 카운팅
cnt += 1
#cnt가 2개보다 많은 경우, 반복문 탈출
if cnt > 2: break
#new_num과 bin_num의 다른 비트가 2개 이하인 경우,
else:
#new_num을 10진수로 바꾸고 answer에 추가한다
answer.append(int(new_num, 2))
continue
#new_num과 bin_num의 다른 비트가 2개 초과인 경우,
#3번쨰로 다른 i번 비트부터 bin_num의 비트로 바꾼다
new_num = new_num[:i] + bin_num[i:]
#new_num을 10진수로 바꾸고 answer에 추가한다
answer.append(int(new_num, 2))
return answer
#시간복잡도 = O(n^2), 공간복잡도 = O(n)
728x90
반응형
'코테 노트 > 프로그래머스' 카테고리의 다른 글
Level 2 전력망을 둘로 나누기 Python 3 (0) | 2022.03.11 |
---|---|
Level 2 교점에 별 만들기 Python 3 (0) | 2022.03.11 |
Level 2 피로도 Python 3 (0) | 2022.03.09 |
Level 2 배달 Python 3 (0) | 2022.03.08 |
Level 2 괄호 회전하기 Python 3 (0) | 2022.03.08 |