PS (Problem Solving)/Baekjoon

[백준] 12931. 두 배 더하기 - 파이썬

캐럿노트 2023. 1. 31. 23:59

문제

https://www.acmicpc.net/problem/12931

 

12931번: 두 배 더하기

모든 값이 0으로 채워져 있는 길이가 N인 배열 A가 있다. 영선이는 다음과 같은 두 연산을 수행할 수 있다. 배열에 있는 값 하나를 1 증가시킨다. 배열에 있는 모든 값을 두 배 시킨다. 배열 B가 주

www.acmicpc.net

설계

- 반대로 접근하여, 주어진 배열을 모두 0으로 만드는 최소 횟수를 계산한다.

N = int(input())
arr = list(map(int, input().split()))
cnt = 0

while sum(arr) > 0: # arr이 모두 0이 될때까지 반복
    check = 0
    for i in range(N):  # 전부 짝수인지 check
        if arr[i] % 2 == 0:
            check += 1

    if check == N:  # 전부 짝수일 경우 2로 나눠준다.
        for i in range(N):
            arr[i] = arr[i] // 2
        cnt += 1
    else:   # 홀수는 -1을 해준다.
        for i in range(N):
            if arr[i] % 2 != 0:
                arr[i] -= 1
                cnt += 1
print(cnt)