[ BOJ / Python ] 12931번 두 배 더하기

황승환·2022년 7월 13일
0

Python

목록 보기
367/498


이번 문제는 그리디 알고리즘을 통해 해결하였다. 주어진 문제와 반대로 모든 배열의 값을 0으로 만드는 방향으로 접근하였다. 우선 2로 나누는 연산이 0으로 가까워지기 훨씬 효율적인 연산이므로, 배열의 값 중 하나라도 짝수가 아닐 때까지 전체에 나누는 연산을 적용하였다. 그리고 배열을 순회하며 홀수인 경우 1을 빼주었다. 이 과정이 끝나면 다시 배열의 모든 값들이 짝수가 되므로, 위 과정을 계속해서 반복할 수 있게 된다.

Code

n = int(input())
arr = list(map(int, input().split()))
answer = 0
def chk_even():
    for i in range(n):
        if arr[i]%2 == 0:
            continue
        else:
            return False
    return True
while arr != [0 for _ in range(n)]:
    while chk_even():
        for i in range(n):
            arr[i] //= 2
        answer += 1
    for i in range(n):
        if arr[i]%2 == 1:
            arr[i] -= 1
            answer += 1
print(answer)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글