[백준] 12931번 두 배 더하기

거북이·2023년 2월 15일
0

백준[골드5]

목록 보기
17/82
post-thumbnail

💡문제접근

  • 배열 A를 배열 B로 만들기 위한 방법을 찾는 것보다 배열 B를 배열 A로 만들기 위한 방법을 찾는 것이 더 수월하다.
  • 문제에서 주어진 연산을 바꿔 표현하면 다음과 같다.
    ①. 배열에 있는 값 하나를 1 감소시킨다.
    ②. 배열에 있는 모든 값을 2로 나눈다.

💡코드(메모리 : 31388KB, 시간 : 44ms)

import sys
input = sys.stdin.readline

N = int(input().strip())
A = [0] * N
B = list(map(int, input().strip().split()))
B.sort()

cnt = 0
while True:
    flag = 0
    if sum(A) == sum(B):
        break
    for i in range(N):
    	# 0이나 1 그리고 홀수인 경우
        if B[i] % 2 != 0 or B[i] == 0 or B[i] == 1:
            # 0에 대해서는 continue
            if B[i] == 0:
                continue
            # 1 혹은 홀수의 경우 → 1 감소시킨다.
            else:
                B[i] -= 1
                cnt += 1
            flag = 1
    # 만약 배열의 전체 수가 모두 짝수인 경우
    if flag == 0:
        for i in range(N):
            B[i] //= 2
        cnt += 1
print(cnt)

💡소요시간 : 10m

0개의 댓글