Python Coding Test

[프로그래머스/파이썬] Lv.0 1로 만들기

Be Delayed 2024. 4. 19. 22:41

문제 설명

정수는 짝수라면 반으로 나누고, 홀수라면 1을 뺀 뒤 반으로 나누다보면 1이 된다.

num_list : 정수들이 담긴 리스트

num_list의 모든 원소를 1로 만들기 위해 필요한 나누기 연산의 횟수를 return 하는 함수 완성하기

제한사항

  • 3 ≤ num_list의 길이 ≤ 15
  • 1 ≤ num_list의 원소 ≤ 30

입출력 예

num_list result
[12,4,15,1,14] 11

 

입출력 예 설명

12는 3번, 4는 2번, 15는 3번, 1은 0번, 14는 3번의 연산이 필요하기 때문에 총 11번의 연산이 필요합니다.

나의 풀이

def solution(num_list):
    answer = 0   # 1이 되기 위한 횟수
    
    for i in num_list:
        count = 0
        while i > 1:
            count += 1
            if i % 2 == 0:
                i = i/2
            else:
                i = (i-1) /2
        answer += count
    return answer

 

  1. while i > 1 : 값이 1보다 클 때만 시행하겠다는 뜻
  2. while문의 첫 줄이 count+=1 이므로 조건문을 돌고 다시 돌아오면 1이 추가됨에 따라 count 값 증가.
  3. 마지막 answer에 count의 값을 더해주면 나누기 연산의 횟수를 구할 수 있다.