12931 두 배 더하기

정민용·2023년 4월 26일

백준

목록 보기
149/286

문제

모든 값이 0으로 채워져 있는 길이가 N인 배열 A가 있다. 영선이는 다음과 같은 두 연산을 수행할 수 있다.

  • 배열에 있는 값 하나를 1 증가시킨다.
  • 배열에 있는 모든 값을 두 배 시킨다.

배열 B가 주어졌을 때, 배열 A를 B로 만들기 위한 연산의 최소 횟수를 구하는 프로그램을 작성하시오.

# 12931
import sys
input = lambda: sys.stdin.readline().strip()

# 1. 배열에 홀수가 있다면 1 감소
# 2. 배열에 홀수가 없다면 모든 수를 1/2 배
# 3. 배열의 모든 수가 0이 된다면 끝

n = int(input())
arr = list(map(int, input().split()))

count = 0
while max(arr) > 0:
    check = True
    for i in range(n):
        if arr[i] % 2 == 1:
            check = False
            arr[i] -= 1
            break
            
    if check:
        for i in range(n):
            arr[i] = arr[i] // 2
        
    count += 1

print(count)

백준 12931 두 배 더하기

0개의 댓글