출처: https://school.programmers.co.kr/learn/courses/30/lessons/181880?language=python3
정수가 있을 때, 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누면, 마지막엔 1이 됩니다. 예를 들어 10이 있다면 다음과 같은 과정으로 1이 됩니다.
10 / 2 = 5
(5 - 1) / 2 = 2
2 / 2 = 1
위와 같이 3번의 나누기 연산으로 1이 되었습니다.
정수들이 담긴 리스트 num_list가 주어질 때, num_list의 모든 원소를 1로 만들기 위해서 필요한 나누기 연산의 횟수를 return하도록 solution 함수를 완성해주세요.
제한사항
3 ≤ num_list의 길이 ≤ 15
1 ≤ num_list의 원소 ≤ 30
입출력 예
num_list result
[12, 4, 15, 1, 14] 11
입출력 예 설명
입출력 예 #1
12는 3번, 4는 2번, 15는 3번, 1은 0번, 14는 3번의 연산이 필요하기 때문에 총 11번의 연산이 필요합니다.
내가 한 풀이
def solution(num_list):
count = 0
# for문안에 while문 도는 형식으로 바꾸기
for i in range(len(num_list)):
current_num = num_list[i] # 현재 인덱스 원소 꼭 변수처리
while current_num > 1:
if current_num % 2 == 0: # 짝수라면 반으로 나누고
current_num = current_num // 2
else: # 홀수라면 1을 뺀 뒤 반으로 나눔
current_num = (current_num - 1) // 2
count += 1
return count
트러블 슈팅
우선 for문과 while문 사이 고민하다가
for문안에 while문을 넣을 것.
그리고 > 0 이 아닌 > 1로 해야 1보다 클동안만 진행한다.