배열 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 |