728x90
반응형
1. 문제 설명
2. 풀이과정
해당 문제는 함수에 넣을 수가 어떤 수인지에 따라 계산이 달라진다.
만약 정수가 짝수이면 무조건 2진수로 변환한 결과는 마지막 비트가 0이다.
하여 무조건 다음 수인 마지막 비트를 1로 바꾼 수가 함숫값이 된다.
하지만 정수가 홀수이면 2진수로 변환한 결과는 끝이 11이거나 01로 끝나게 된다.
하여 홀수일 경우에는 정수를 2진수의 뒤집은 결과를 구하고 앞에서부터 다음 비트와 비교하여 01이 나오면 함숫값은 두 비트를 바꾼 값이 된다.
2 = 10 → 3 = 11 | 4 = 100 → 5 = 101 | 6 = 110 → 7 = 111 | 8 = 1000 → 9 = 1001
5 = 101 → 6 = 110 | 7 = 0111 → 11 = 1011 | 11 = 1011 → 13 = 1101
- 입력받은 정수를 하나씩 불러온다. for i in numbers
- 만약 정수가 짝수이면 if (i % 2 == 0)
- 함숫값은 바로 다음 정수이다. answer.append(i + 1)
- 함숫값을 찾았으므로 다음 정수를 불러온다. continue
- 반면에 정수가 홀수이면 else
- 해당 정수를 2진수로 바꾼 결과를 저장할 리스트를 생성한다. bit = list()
- 정수가 0이 되기 전까지 반복하며 while (i > 0)
- 정수를 2로 나눈 나머지를 추가한다. bit.append(i % 2)
- 정수를 2로 나눈 몫으로 다시 저장한다. i //= 2
- 모든 비트가 1일 경우 비트가 추가되는 것을 고려하여 0을 하나 더 추가해 준다. bit.append(0)
- 제일 앞 비트부터 차례대로 불러오며 for j in range(len(bit) - 1)
- 만약 해당 비트와 다음 비트가 다르면 if (bit[j] != bit[j + 1])
- 두 비트를 바꾼 결과가 함숫값이 된다. bit[j], bit[j + 1] = bit[j + 1], bit[j]
- 함숫값을 찾았으므로 종료한다. break
- 해당 함숫값을 정수로 전환하기 위해 변수를 생성하고 초기화한다. num = 0
- 앞에서부터 비트를 하나씩 불러와 for j in range(len(bit))
- 10진 정수로 변환하여 준다. num += 2**j * bit[j]
- 변환한 정수를 추가한다. answer.append(num)
반응형
3. 소스코드
def solution(numbers):
answer = []
for i in numbers:
if (i % 2 == 0):
answer.append(i + 1)
continue
else:
bit = list()
while (i > 0):
bit.append(i % 2)
i //= 2
bit.append(0)
for j in range(len(bit) - 1):
if (bit[j] != bit[j + 1]):
bit[j], bit[j + 1] = bit[j + 1], bit[j]
break
num = 0
for j in range(len(bit)):
num += 2**j * bit[j]
answer.append(num)
return answer
728x90
반응형
'프로그래머스 > Python' 카테고리의 다른 글
[프로그래머스] 다리를 지나는 트럭 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.09 |
---|---|
[프로그래머스] 가장 큰 수 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.07 |
[프로그래머스] 택배상자 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.05 |
[프로그래머스] 단속카메라 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.10.03 |
[프로그래머스] 대충 만든 자판 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.29 |
[프로그래머스] 2 x n 타일링 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.27 |
[프로그래머스] 숫자 게임 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.25 |
[프로그래머스] 문자열 나누기 - 파이썬(Python) - 우당탕탕 개발자 되기 프로젝트 (0) | 2023.09.23 |