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)));
}
'자료구조 & 알고리즘 > 프로그래머스' 카테고리의 다른 글
Level 2. 삼각 달팽이 (0) | 2023.05.07 |
---|---|
Level 0. 배열 조각하기 (0) | 2023.05.06 |
Level 0. 세 개의 구분자 (0) | 2023.05.05 |
Level 0. 문자열 여러 번 뒤집기 (0) | 2023.05.05 |
Level 0. 전국 대회 선발 고사 (0) | 2023.05.04 |