백준/그리디

[백준] C++ 12931번(두 배 더하기)

2zreal 2024. 7. 21. 17:35

 배열 A를 B로 바꾸기 위한 최소 연산 횟수를 출력하는 문제이다.

이 문제는 배열 B를 모두 0으로 만드는 문제로 수정할 수 있다.

 

문제 해결 방법

1. 만약 배열 B의 요소가 2의 배수가 아니라면 1씩 감소시켜 2의 배수로 만들어준다.

2. 만약 배열 B의 요소가 모두 2의 배수라면 2로 나눈다.

3. 모두 0이 될 때까지 위 작업을 반복한다.

 

 

#include <iostream>

using namespace std;
int A[100];
int B[100];
int main(void)
{
	int N=0;
	int count=0;
	int zero=0;
	
	cin>>N;
	
	for(int i=0; i<N; i++)
	{
		cin>>B[i];
		if(B[i]==0)
		{
			zero++;
		}
	}
	
	
	while(true)
	{
		int sig=0;
		
		for(int i=0; i<N; i++)
		{
			if(B[i]%2!=0&&B[i]>0)
			{
				B[i]=B[i]-1;
				count++;
				sig=1;
				
				if(B[i]==0)
				{
					zero++;
				}
			}
		}
		
		if(zero==N)//전부 0이라면?? 종료 
		{
			cout<<count;
			break;
		}
		
		if(sig==0)//전부 0이 아니라면 위에서 짝수로 만들었기 때문에 나눠준다. 
		{
			for(int i=0; i<N; i++)
			{
				B[i]=B[i]/2;
			}
			count++;
		}
		
	}
	  
	return 0;
}

'백준 > 그리디' 카테고리의 다른 글

[백준] 13975번 파일 합치기3  (0) 2024.10.07
[백준] C++ 1911번(흙길 보수하기)  (0) 2024.07.21
[백준] C++ 1263번(시간 관리)  (0) 2024.07.18
[백준] C++ 2212(센서)  (0) 2024.07.13
[백준] C++ 13164(행복 유치원)  (0) 2024.07.13