https://school.programmers.co.kr/learn/courses/30/lessons/77885
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
코드 & 풀이
def solution(numbers):
answer = []
for num in numbers:
if num % 2 == 0:
answer.append(num + 1)
else:
num_bit = bin(num)[2:]
idx = num_bit.rfind('0')
if idx == -1:
find_num = '10' + num_bit[1:]
else:
find_num = num_bit[:idx] + '10' + num_bit[idx + 2:]
answer.append(int(find_num, 2))
return answer
num이 짝수이면 무조건 + 1한 값이 정답
ex)
if num = 2 (10), answer = 3(11)
if num = 4 (100), answer = 5(101)
num이 홀수이면
- 1로만 이루어져 있는 경우 ’10’을 먼저 쓴 후 나머지를 1로 채워줌
ex)
if num = 3 (11), answer = 5 (101)
if num = 7 (111), answer = 11 (1011) - 아닌 경우 (중요)
가장 오른쪽에 있는 0의 위치를 찾아서 1로, 그 오른쪽 1은 0으로 바꾸는 게 가장 좋음
ex)
num = 11 (1011)일때 가장 좋은 경우는 13 (1101)임
이렇게 만들기 위해
‘1’ ( [:0 - idx (1)] ) + ‘10’ + '1'( [idx (1) + 2:] )= ‘1101’
처음에는 숫자를 올려가면서 비트 수를 or 연산 후 1의 개수를 count 했는데
이런 방식이 있었음.
728x90
'프로그래머스 > Lv.2' 카테고리의 다른 글
전화번호 목록 - Python, HashMap, Dictionary (0) | 2025.05.10 |
---|---|
조이스틱 - Python, 그리디 (0) | 2025.05.07 |
2025 프로그래머스 코드챌린지 1차 예선 > 비밀 코드 해독 - Python, combinations (0) | 2025.03.07 |
2022 KAKAO BLIND RECRUITMENT > 주차 요금 계산 - Python, ceil(올림), defaultdict (0) | 2025.03.01 |
[PCCP 기출문제] 2번 > 석유 시추 - Python, bfs, 누적합 (0) | 2025.02.27 |