주사위 게임 3 : 문제 링크
- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 x p점을 얻는다.
- 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p != q)라면 (10 x p + q)^2 점을 얻는다.
- 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p != q)라고 한다면 (p + q) x |p - q|점을 얻는다.
- 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q != r)이라면 q x r점을 얻는다.
- 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻는다.
algorithm 헤더의 sort() 함수 사용법
void sort(T start, T end, Compare comp); //comp 인자가 공란이면 오름차순 정렬
- sort(v.begin(), v.end(), compare); // 사용자 정의 함수 사용
- sort(v.begin(), v.end(), greater<자료형>()); // 내림차순
- sort(v.begin(), v.end(), less<자료형>()); // 오름차순
#include <algorithm>
using namespace std;
int solution(int a, int b, int c, int d) {
vector<int> v = {a, b, c, d};
sort(v.begin(), v.end());
if(v[0] == v[3]) return 1111 * v[0];
else if(v[0] == v[2]) return (10 * v[0] + v[3]) * (10 * v[0] + v[3]);
else if(v[1] == v[3]) return (10 * v[1] + v[0]) * (10 * v[1] + v[0]);
else if(v[0] == v[1]) {
if(v[2] == v[3]) return (v[0] + v[2]) * abs(v[0] - v[2]);
else return v[2] * v[3];
}
else if(v[1] == v[2]) {
if(v[0] == v[3]) return (v[0] + v[1]) * abs(v[0] - v[1]);
else return v[0] * v[3];
}
else if(v[2] == v[3]) {
if(v[0] == v[1]) return (v[0] + v[2]) * abs(v[0] - v[2]);
else return v[0] * v[1];
}
else return v[0];
}