[오늘의 문제] 1로 만들기

shlim55·2025년 12월 10일

코딩테스트

목록 보기
198/223

출처: 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보다 클동안만 진행한다.

profile
A Normal Programmer

0개의 댓글