반응형
https://www.acmicpc.net/problem/9037
9037번: The candy war
입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 각각의 테스트 케이스의 첫 줄에는 아이의 인원 N (1 ≤ N ≤ 10)이 주어지고 그 다음 줄에
www.acmicpc.net
구현 문제였습니다.
📕 풀이방법
📔 입력 및 초기화
test case t, 학생 수 n, candy 정보 vector candyState, 정답을 출력할 변수 cycle를 선언한 뒤 적절히 입력받습니다.
📔 풀이과정
놀이대로 구현하면 됩니다.
1. 먼저 홀수개를 가진 아이에게 1개씩 사탕을 줍니다.
2. while loop를 모든 아이가 사탕을 동일하게 가지지 못한 동안 수행합니다.
2-1. 오른쪽 사람에게 사탕의 절반을 줍니다.
2-2. 홀수개를 가진 아이에게 1개씩 사탕을 줍니다.
📔 정답출력
cycle을 출력합니다.
📕 Code
#include <bits/stdc++.h>
using namespace std;
int t, n, c, cycle;
vector <int> candyState;
bool isAllHaveSameCandy(){
for(int i = 0; i < n - 1; i++)
if(candyState[i] != candyState[i+1])
return false;
return true;
}
void giveCandyToRightChild(){
vector <int> tmp(n);
for(int i = 0; i < n - 1; i++){
tmp[i+1] = candyState[i] / 2;
}
tmp[0] = candyState[n - 1] / 2;
for(int i = 0; i < n; i++){
candyState[i] = candyState[i] / 2 + tmp[i];
}
}
void giveCandyWhoHasOdd(){
for(int i = 0; i < n; i++)
if(candyState[i] % 2)
candyState[i]++;
}
int main(){
cin >> t;
while(t--){
cin >> n;
cycle = 0;
candyState.resize(n);
for(int i = 0; i < n; i++) cin >> candyState[i];
giveCandyWhoHasOdd();
while(!isAllHaveSameCandy()){
cycle++;
giveCandyToRightChild();
giveCandyWhoHasOdd();
}
cout << cycle << '\n';
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 20053 : 최소, 최대 2 (0) | 2022.05.19 |
---|---|
(C++) - 백준(BOJ) 18883 : N M 찍기 (0) | 2022.05.18 |
(C++) - 백준(BOJ) 24751 : Betting (0) | 2022.05.09 |
(C++) - 백준(BOJ) 17356 : 욱 제 (0) | 2022.05.07 |
(C++) - 백준(BOJ) 6550 : 부분 문자열 (0) | 2022.05.05 |