코딩테스트 (C#)

백준 2480 : 주사위 세개 - C# 풀이

UniCoti-sub 2024. 8. 19.
반응형

문제 사진

이번 문제는 조금 어려울 수 있다.

주사위 3개를 던져서 필요 조건을 맞춘 값을 출력하면 된다.

3개 모두 같은 값이 나오면 10000 + 1000x(같은 눈),

2개가 같은 값이면 1000 + 100x(같은 눈),

모두 다르면 100x(가장 큰 눈) 의 상금을 받게 된다고 한다.

 

먼저, 입력값을 읽고, if문을 쓰면 될 것 같은데

조건을 구성하기가 꽤나 까다롭다.

 

3개 모두 같은 값은 1번과 2번이 같은지와 2번과 3번이 같은지로 확인할 수 있지만

(arr[0] == arr[1] && arr[1] == arr[2])

 

2개가 같은 값은 조건이 너무 길어진다.

1번과 2번이 같은 경우, 2번과 3번이 같은 경우, 1번과 3번이 같은 경우로 나눠보자.

그걸 만약에 한 조건으로 쓰게 되면 같은 값이 1,2,3중 무엇인지 모르게 된다.

따라서 2개가 같은 값을 해결하는 게 메인이라고 보면된다.

 

모두 다른건 모두 같은 것의 역으로 쉽게 해결 가능하다.

using System;

namespace unicoti {
    class Program {
        static void Main(string[] args) {
            string[] arr = Console.ReadLine().Split(' ');
            int[] nums = new int[3];
            nums[0] = int.Parse(arr[0]);
            nums[1] = int.Parse(arr[1]);
            nums[2] = int.Parse(arr[2]);
            
            Array.Sort(nums);
            if((nums[0] == nums[2])) {
                Console.WriteLine(10000+nums[0]*1000);
            } else if((nums[0] == nums[1]) || (nums[1] == nums[2])) {
                Console.WriteLine(1000+nums[1]*100);
            } else {
                Console.WriteLine(100*nums[2]);
            }
        }
    }
}

 

조금 고민해본 결과 Sort를 통해서 쉽게 해결할 수 있었다.

if문을 사용하기 전 오름차순으로 배열을 정리했다.

 

오름차순으로 배열을 정리하면 같은값이 2개일 때 경우가 정해진다.

같은 값이 2개라면 1번과 3번에 나타나지 않고, 1,2번이나 2,3번에 들어간다.

 

만약 같은 값이 3개라면 유일하게 1번과 3번이 같을 수 있게 된다.

또한 이 모든게 순차적으로 연관된 코드라서 else에 모두 다 다를경우를 만들 수 있었다.

이후 문제의 조건대로 출력해주면 완료.

 

다른분들도 Sort를 이용했는지 모르겠다.

나름대로 창의적이였다고 생각한다.


오늘의 느낀점)

문제와 전혀 상관없음에도 sort를 사용하는 획기적인 생각이 나서 기분이 좋았다.

또한 LinQ를 사용했다면 코드 수를 더욱 줄이면서도 더욱 편한 알고리즘을 구성할 수 있었겠으나

현재 IDE가 없는 상황이라서 불편하여 사용하지는 않았다.

 

지금까지는 너무 쉬운 문제가 대부분이였는데, 이번 문제는 나름대로 재밌었다.

물론 if문을 계속해서 쓴다면 조금 복잡하긴 해도 성공은 할 수 있었겠으나

if문 3번 중첩부터는 사용 불가라고 생각하고 있어서 발전에 도움이 된 것 같다.

나중에 회사가서도 이렇게 아이디어를 생각할 시간이 있을 지 궁금하다.

오랜만에 재밌었다.


이상으로 도움이 되었길 바라며,

 

끝.

반응형

댓글