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)