정답 코드
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
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[Python] 프로그래머스 lv.0 A 강조하기 (0) | 2024.11.06 |
---|---|
[Python] 프로그래머스 lv.0 배열에서 문자열 대소문자 변환하기 (0) | 2024.11.06 |
[Python] 프로그래머스 lv.0 조건에 맞게 수열 변환하기2 (0) | 2024.11.02 |
[Python] 프로그래머스 lv.0 5명씩 (0) | 2024.11.02 |
[Python] 프로그래머스 lv.0 홀수 vs 짝수 (0) | 2024.11.02 |