그냥하는코딩
프로그래머스 2단계 - [2개 이하로 다른 비트] 본문
https://programmers.co.kr/learn/courses/30/lessons/77885
코딩테스트 연습 - 2개 이하로 다른 비트
programmers.co.kr
1. 문제이해
1) 이진법 구하기
2) 2진법에서 해당 숫자보다 큰 숫자중 XOR한 값에 1의 갯수가 2이하인 수중 가장 작은 수
- 해당 숫자보다 클 것
- XOR 한 값에 1의 갯수가 2개 이하인 수
- 그 중 가장 작은 수
3) 시간 복잡도를 고려한 설계
- 2) 의 내용을 만족하는 숫자는 마지막에 나오는 01을 10으로 변경하는 것
- 위 내용을 위해 3가지 케이스로 나누어 생각 (0이 없는경우, 0이 마지막에 있는경우, 그 외)
2. 코드작성
def solution(numbers):
answer = []
for number in numbers:
byteNum = format(number, 'b')
if byteNum.find('0') == -1:
byteNum = '10' + byteNum[1:]
elif byteNum[-1] == '0':
byteNum = byteNum[:-1] + '1'
else:
li = byteNum.rsplit('01', 1)
byteNum = '10'.join(li)
answer.append(int(byteNum, 2))
return answer
※ 시간복잡도
O(n)
3. 풀이간 체크사항
1) 인덱스 값 찾기 : str.find('A')
2) 뒤에서부터 문자열 replace 하기
li = byteNum.rsplit(oldStr, changeCount)
byteNum = newStr.join(li)
3) 문자열 이진수를 10진수 숫자로 변환하기
int('1001', 2) # 9
4) 숫자를 이진수로 변경하기 (0b 가 생략되어 나온다.)
byteNum = format(8, 'b') # 1000
Comments