[백준] 2480번 주사위 세게

권태형·2023년 12월 5일

알고리즘

목록 보기
15/33

한줄에 들어있는 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 조건문을 안쓰고 그저 삼항연산자를 사용했을 뿐. 실질적인 로직구성은 같았다.

profile
22년 12월 개발을 시작한 신입 개발자 ‘권태형’입니다. 포스팅 하나하나 내가 다시보기 위해 쓰는 것이지만, 다른 분들에게도 도움이 되었으면 좋겠습니다. 💯컬러폰트가 잘 안보이실 경우 🌙다크모드를 이용해주세요.😀 지적과 참견은 언제나 환영합니다. 많은 댓글 부탁드립니다.

0개의 댓글