백준 온라인 저지, 그리디 / 12931번: 두배더하기 (파이썬 / , 백준 골드문제)
2022. 2. 2. 13:20ㆍ알고리즘/그리디
728x90
반응형
문제
모든 값이 0으로 채워져 있는 길이가 N인 배열 A가 있다. 영선이는 다음과 같은 두 연산을 수행할 수 있다.
- 배열에 있는 값 하나를 1 증가시킨다.
- 배열에 있는 모든 값을 두 배 시킨다.
배열 B가 주어졌을 때, 배열 A를 B로 만들기 위한 연산의 최소 횟수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 배열의 크기 N이 주어진다. (1 ≤ N ≤ 50)
둘째 줄에는 배열 B에 들어있는 원소가 공백으로 구분해서 주어진다. 배열에 B에 들어있는 값은 0보다 크거나 같고, 1,000보다 작거나 같다.
출력
첫째 줄에 배열 A를 B로 바꾸기 위한 최소 연산 횟수를 출력한다.
예제 입력 1
2 2 1
예제 출력 1
3
예제 입력 2
3 16 16 16
예제 출력 2
7
예제 입력 3
1 100
예제 출력 3
9
예제 입력 4
5 0 0 1 0 1
예제 출력 4
2
접근 방법
- B 수열의 원소가 홀수인 경우 숫자를 하나씩 빼주고, 모든 원소가 짝수라면 2를 나눠준다.
코드
# https://www.acmicpc.net/problem/12931
# 접근 방법
# B 수열의 원소가 홀수인 경우 숫자를 하나씩 빼주고, 모든 원소가 짝수라면 2를 나눠준다.
n = int(input())
arr = list(map(int, input().split()))
count = 0
while True:
zero_count = 0
for i in range(n):
if arr[i] % 2:
arr[i] -= 1
count += 1
if arr[i] == 0:
zero_count += 1
if zero_count == n:
print(count)
break
else:
count += 1
for i in range(n):
arr[i] //= 2
728x90
반응형
'알고리즘 > 그리디' 카테고리의 다른 글
백준 온라인 저지, 그리디 / 1422번: 숫자의신 (파이썬 / , 백준 플레티넘문제) (0) | 2022.04.06 |
---|---|
백준 온라인 저지, 그리디 / 1049번: 기타줄 (파이썬 / , 백준 실버문제) (0) | 2022.04.06 |
백준 온라인 저지, 그리디 / 2594번: 놀이공원 (파이썬 / , 백준 실버문제) (0) | 2022.02.02 |
백준 온라인 저지, 그리디 / 11508번: 2+1세일 (파이썬 / , 백준 실버문제) (0) | 2022.02.02 |
백준 온라인 저지, 그리디 / 9237번: 이장님초대 (파이썬 / , 백준 실버문제) (0) | 2022.01.02 |