본문 바로가기

코딩테스트/Python

[Python] 백준 #12931 - 두 배 더하기

문제


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

 

12931번: 두 배 더하기

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

www.acmicpc.net

 

 

 

풀이


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

cnt=0
while any(arr): # arr 에 1 이상이 하나라도 있을 경우 반복
    tmp = [i for i in arr] # 2로 나누어질 경우 저장
    for i in range(len(arr)):
        if arr[i] %2 ==0 : # 만약 2로 나눠지면
            tmp[i] = arr[i]//2 # tmp에 2로 나눈 결과 저장
        else: #나눠지지 않으면
            arr[i]-=1 # 1을 뺌
            cnt+=1
            break
    else: # 모두 2로 나누어지면 arr에 tmp 대입
        arr = tmp
        cnt+=1

print(cnt)

 

리스트가 모두 0이 될 때 까지 반복문을 돌려주었다.

 

tmp는 2로 나눈 결과를 저장하는 리스트이다.

만약 arr이 모두 2로 나누어지면 arr에 tmp를 대입한다.

2로 나눠지는 숫자가 존재하면 -1을 빼주고 다시 반복문을 돌린다.