프로그래머스 주사위 게임 3 문제 바로가기

구현하는게 은근히 까다로웠던 문제… python이라면 Counter 라이브러리를 불러와서 바로 풀었을 텐데, C++은 그런 라이브러리가 존재하지 않아 한땀한땀 구현해야하는게 필요하다. 물론 자체 제작 counter을 만들면 되긴 하지만! vector로 숫자를 받고 오름차순으로 sort해준 뒤에 나머지 작업을 진행했다. 가독성을 높이기 위해서 switch구문을 활용해서 숫자의 종류의 수에 따라 case을 나누어 풀어주었다.

#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
#include <set>

using namespace std;

int solution(int a, int b, int c, int d) {
    vector<int> nums{a,b,c,d};
    set<int> counts{a,b,c,d};
    sort(nums.begin(), nums.end());
    
    switch (counts.size()){
        case 1:
            return 1111*nums[0];
        case 2:
            if (nums[1] != nums[2]){
                return (nums[3]+nums[0]) * (nums[3]-nums[0]);
            } else{
                if (nums[0] == nums[1]){
                    return pow((10 * nums[0] + nums[3]), 2);
                } else{
                    return pow((10 * nums[3] + nums[0]), 2);
                }
            }
        case 3:
            if (nums[0] == nums[1]){return nums[2]*nums[3];}
            if (nums[0] == nums[2]){return nums[1]*nums[3];}
            if (nums[0] == nums[3]){return nums[1]*nums[2];}
            if (nums[1] == nums[2]){return nums[0]*nums[3];}
            if (nums[1] == nums[3]){return nums[0]*nums[2];}
            if (nums[2] == nums[3]){return nums[0]*nums[1];}
        case 4:
            return nums[0];
    }
}