Coding Test/BaekJoon_Python

백준 12931 <두 배 더하기> Python

JunOnJuly 2024. 11. 24. 15:52
728x90

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


단순한 계산 문제입니다.

나누기는 모든 원소를 나누므로 가장 많이 나누는 경우를 구해 그 최댓값만 사용하면 됩니다.

또 빼기는 각 원소마다 따로 카운트 하므로 빼는 경우를 모두 더해주면 됩니다.


import sys

input = sys.stdin.readline


def seq(num):
    # 카운트
    div_cnt = 0
    sub_cnt = 0
    # 순회
    while num:
        # 2 로 나누어 떨어지면
        if not num%2:
            num //= 2
            div_cnt += 1
        
        # 나누어떨어지지 않으면
        else:
            num -= 1
            sub_cnt += 1

    return div_cnt, sub_cnt


def solution(N, B):
    # 각 배열의 원소를 -1 과 //2 로 0 으로 바꾸는 횟수
    for b in range(len(B)):
        B[b] = seq(B[b])
    
    # 뺀 횟수는 모두 더하고 나눈 횟수는 최댓값만 사용
    cnt = sum([s for d, s in B]) + max([d for d, s in B])
    
    print(cnt)


# 입력
N = int(input().strip())
B = list(map(int, input().strip().split()))

solution(N, B)

 

728x90

'Coding Test > BaekJoon_Python' 카테고리의 다른 글

백준 1185 <유럽여행> Python  (1) 2024.11.26
백준 9251 <LCS> Python  (0) 2024.11.25
백준 2042 <구간 합 구하기> Python  (0) 2024.11.23
백준 15662 <톱니바퀴 (2)> Python  (0) 2024.11.22
백준 14950 <정복자> Python  (1) 2024.11.21