세 정수 X,Y,Z 를 입력 받아 다음의 연산을 적용하여 X=Y=Z 가 되는 최소 연산의 횟수를 출력하는 프로그램을 작성하시오.
가능한 연산
X,Y,Z 중에서 2개를 선택하여 1 증가시킨다.
X,Y,Z 중에서 1개를 선택하여 2 증가시킨다.
입력
첫 줄에 세 정수 X,Y,Z 가 입력된다. (0<=X,Y,Z<=51)
출력
주어진 조건을 만족하는 최소의 연산 횟수를 출력한다.
더보기
입력 예시
2 5 4
출력 예시
2
#include<iostream>
#include<algorithm>
using namespace std;
int evenDif(int X, int Y, int Z) {
return (Z - X) / 2 + (Z - Y) / 2;
}
int solve(int X, int Y, int Z) {
if ((Y - X) % 2 != 0 && (Z - Y) % 2 != 0) {
return 2 + evenDif(X + 1, Y + 2, Z + 1);
}
else if ((Y - X) % 2 == 0 && (Z - Y) % 2 != 0) {
return 1 + evenDif(X + 1, Y + 1, Z);
}
else if ((Y - X) % 2 != 0 && (Z - Y) % 2 == 0) {
return 1 + evenDif(X, Y + 1, Z + 1);
}
else {
return evenDif(X, Y, Z);
}
}
int main() {
int X, Y, Z;
cin >> X >> Y >> Z;
int sum = X + Y + Z;
int maxValue = max(X, max(Y, Z));
int minValue = min(X, min(Y, Z));
int midValue = sum - maxValue - minValue;
cout << solve(minValue, midValue, maxValue);
return 0;
}
'알고리즘' 카테고리의 다른 글
[백준] 2167 - 2차원 배열의 합 (0) | 2020.03.23 |
---|---|
[코드업] 2634 - 거스름돈 II (0) | 2020.03.15 |
[백준] 14889 - 스타트와 링크 (0) | 2020.03.10 |
[백준] 14888 - 연산자 끼워넣기 (0) | 2020.03.09 |
[코드업] 3705 - 연속된 구간의 최대합 (0) | 2020.03.07 |