Make Unreal REAL.
article thumbnail
Level 0. 주사위 게임 3

 

 

map을 사용하면 가장 작은 첫 번째 원소를 바로 가져올 수 있다.

 

#include <iostream>
#include <map>
#include <cmath>

using namespace std;

int solution(int a, int b, int c, int d)
{
    int answer = 1;
    map<int, int> mp;

    ++mp[a], ++mp[b], ++mp[c], ++mp[d];

    switch (mp.size())
    {
    case 1:
        answer = 1111 * a;
        break;
    case 2:
        if (mp.begin()->second == 2) answer = (mp.begin()->first + mp.rbegin()->first) * abs(mp.begin()->first - mp.rbegin()->first);
        else if (mp.begin()->second == 3) answer = pow(10 * mp.begin()->first + mp.rbegin()->first, 2);
        else answer = pow(10 * mp.rbegin()->first + mp.begin()->first, 2);
        break;
    case 3:
        for (auto pr : mp) answer *= (pr.second == 1) ? pr.first : 1;
        break;
    case 4:
        answer = mp.begin()->first;
        break;
    default:
        break;
    }

    return answer;
}

 

다른 사람의 풀이이다.

 

역시 가장 간단한 게 최고다.

 

#include <iostream>

using namespace std;

int solution(int a, int b, int c, int d)
{
    if      (a == b && b == c && c == d) return 1111 * a;
    else if (a == b && b == c) return (10 * a + d) * (10 * a + d);
    else if (b == c && c == d) return (10 * b + a) * (10 * b + a);
    else if (c == d && d == a) return (10 * c + b) * (10 * c + b);
    else if (d == a && a == b) return (10 * d + c) * (10 * d + c);
    else if (a == b && c == d) return (a + c) * abs(a - c);
    else if (a == c && b == d) return (a + d) * abs(a - d);
    else if (a == d && b == c) return (a + b) * abs(a - b);
    else if (a == b) return c * d;
    else if (a == c) return b * d;
    else if (a == d) return b * c;
    else if (b == c) return a * d;
    else if (b == d) return a * c;
    else if (c == d) return a * b;
    else             return min(a, min(b, min(c, d)));
}
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그