코딩 테스트/프로그래머스
[Python] 프로그래머스 lv.0 1로 만들기
위시리
2024. 11. 5. 01:05

정답 코드
def solution(num_list):
answer = 0
while list(set(num_list)) != [1]:
for i in range(len(num_list)):
if num_list[i] == 1 :
continue
if num_list[i] % 2 == 0: # 짝수라면
num_list[i] = num_list[i] // 2
answer += 1
else: # 홀수라면
num_list[i] = (num_list[i] - 1) // 2
answer += 1
return answer
다른 사람 코드 1
def solution(num_list):
return sum(len(bin(i))-3 for i in num_list)
예를 들어 i=12 일때, bin(i) 를 하면 '0b1100' 이 됩니다. 여기서 우리는 마지막으로 남겨야 하는 1; 즉 2^0인 맨끝의 '0'과 과 이진수를 나타내는 앞의 '0b' 총 길이 3을 제외한 나머지 숫자들인 "110" 을 없애는 것이 목표값이 되는데, 이는 각 자리마다 2를 나누는 횟수기 때문에 "110"의 길이인 3이 됩니다. 홀 수 일 때는 어차피 -1을 해서 짝수로 만들기 때문에 가능합니다.
2진법으로 표현된 정수의 가장 큰 자릿수만큼 2로 나눌수 있다
다른 사람 코드 2
def solution(num_list):
answer = 0
for n in num_list:
while n != 1:
n //= 2
answer += 1
return answer