
한줄에 들어있는 3개의 입력값에 대해서 각각 비교하고 결과를 도출하는 문제이다.
일단 조건문 문제로 가장 간단하게 모든 조건을 if, else를 이용해 나열해서 풀이한다면 아래와 같은 코드가 될 것이다.
int[] nums = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int prize;
//모두 같은 경우
if(nums[0] == nums[1] && nums[1] == nums[2]) prize = 1000 * nums[0] + 10000;
//첫번째와 두번째만 같은 경우
else if(nums[0] == nums[1]) prize = 100 * nums[0] + 1000;
//첫번째와 세번째만 같은 경우
else if(nums[0] == nums[2]) prize = 100 * nums[0] + 1000;
//두번째와 세번째만 같은 경우
else if(nums[1] == nums[2]) prize = 100 * nums[1] + 1000;
// 모두 다른경우
else {
//모두다른 경우중 첫번째가 가장 큰 경우
if(nums[0] > nums[1] && nums[0] > nums[2]) prize = 100 * nums[0];
//두번째가 가장 큰 경우
else if(nums[1] > nums[0] && nums[1] > nums[2]) prize = 100 * nums[1];
//세번째가 가장 큰 경우
else prize = 100 * nums[2];
}
Console.WriteLine($"{prize}");

우와 징그럽게 코드가 생겼다. 결과는 통과하는 정상적인 로직이지만, 역시 가독성이 매우 떨어진다. if, else또한 너무 길어지는 경우 줄일 방법을 생각해야 한다.
int[] nums = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
int prize;
Array.Sort(nums);
if(nums[0] == nums[1] && nums[0] == nums[2]) prize = 1000 * nums[0] + 10000;
else if (nums[0] == nums[1] || nums[1] == nums[2]) prize = 100 * nums[1] + 1000;
else prize = nums[2] * 100;
Console.WriteLine($"{prize}");

Array.Sort()를 이용해서 입력된 배열을 정렬하면 반드시 배열 내 마지막 요소가 가장 큰 수가 되어 처음쓴 코드에서 가장 마지막의 모든 조건을 제거할 수 있다.
또한 정렬이 되었을 때 만약 2개가 같은 경우는 반드시 배열내 중간 요소를 포함하게 되기 때문에 2개가 같은 경우를 찾는 조건 3개를 1개로 줄여서 작성할 수 있다.
string[] i=Console.ReadLine().Split();
Array.Sort(i);
int A=int.Parse(i[0]);
int B=int.Parse(i[1]);
int C=int.Parse(i[2]);
Console.Write(A==B?(B==C?10000+A*1000:1000+A*100):(B==C?1000+B*100:C*100));
다른사람들 풀이도 크게 다르지 않았다. 조건을 일반적인 if, else 조건문을 안쓰고 그저 삼항연산자를 사용했을 뿐. 실질적인 로직구성은 같았다.