반응형
[문제 풀이]
1. 홀수개를 가진 아이에게 1개씩 사탕을 준다.
2. 모든 아이가 사탕을 동일하게 가질 때까지 수행한다.
2-1. 오른쪽 사람에게 사탕의 절반을 준다.
2-2. 홀수개를 가진 아이에게 1개씩 사탕을 준다.
[코드]
- 홀수개를 가진 아이에게 1개씩 사탕을 준다.
for(int n=0; n<N; n++){
if(arr[n]%2 != 0) arr[n]++;
}
- 오른쪽 사람에게 사탕의 절반을 준다.
for(int n=0; n<N; n++){
arr[n] /= 2;
}
int last = arr[N-1];
for(int n=N-1; n>0; n--){
arr[n] += arr[n-1];
}
arr[0] += last;
[전체 코드]
#include <iostream>
#include <vector>
using namespace std;
bool check(int n, int arr[]){
bool flag = true;
for(int i=0; i<n-1; i++){
if(arr[i] != arr[i+1]){
flag = false;
}
}
return flag;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T, N, arr[11], answer;
vector<int> vc;
cin>>T;
for(int t=0; t<T; t++){
cin>>N;
for(int n=0; n<N; n++){
cin>>arr[n];
}
answer = 0;
if(N == 1){
cout<<answer<<"\n";
continue;
}
for(int n=0; n<N; n++){
if(arr[n]%2 != 0) arr[n]++;
}
while(true){
if(check(N, arr)) break;
answer++;
for(int n=0; n<N; n++){
arr[n] /= 2;
}
int last = arr[N-1];
for(int n=N-1; n>0; n--){
arr[n] += arr[n-1];
}
arr[0] += last;
for(int n=0; n<N; n++){
if(arr[n]%2 != 0) arr[n]++;
}
}
cout<<answer<<"\n";
}
return 0;
}
https://www.acmicpc.net/problem/9037
반응형
'Algorithm > Baekjoon' 카테고리의 다른 글
[ 백준 20114 ] 미아 노트 (C++) (0) | 2025.04.10 |
---|---|
[ 백준 10994 ] 별 찍기 - 19 (C++) (0) | 2025.02.23 |
[ 백준 2503 ] 숫자 야구 (C++) (0) | 2025.02.15 |
[ 백준 1431 ] 시리얼 번호 (C++) (0) | 2025.02.10 |
[ 백준 1388 ] 바닥 장식 (JAVA) (0) | 2025.01.31 |