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

일일히 조건 나눠가며 풀기

C++에서는 AND 연산자를 &&로, OR 연산자를 ||로 표현할 수 있다. 이를 이용해서 일일히 조건을 나누면 문제를 해결할 수 있다.

#include <string>
#include <vector>
#include <cmath>

using namespace std;

int solution(int a, int b, int c) {
    if (a == b && b == c){
        return (a+b+c)*(pow(a,2)+pow(b,2)+pow(c,2))*(pow(a,3)+pow(b,3)+pow(c,3));
    } else if (a==b || b==c || c==a){
        return (a+b+c)*(pow(a,2)+pow(b,2)+pow(c,2));
    } else{
        return a+b+c;
    }
}

std::set

그러나 조건이 복잡해진다면 코드가 복잡해질 염려가 있어서 간편한 방법이 필요하다. 이 경우 set을 이용하면 간단하게 해결 가능하다. set은 중복되는 요소가 없기 때문에 arr.size()을 통해서 몇 개의 숫자가 동일한지 역추적할 수 있게 된다. include <set>으로 헤더를 불러오고 set<int> s{a,b,c};로 선언(declare)한 뒤에 사용하면 된다.

#include <string>
#include <vector>
#include <math.h>
#include <set>

using namespace std;

int solution(int a, int b, int c)
{
    set<int> s{a, b, c};
    if(s.size() == 3)
        return a + b + c;
    if(s.size() == 2)
        return (a + b + c) * (pow(a, 2) + pow(b, 2) + pow(c, 2));
    if(s.size() == 1)
        return (a + b + c) * (pow(a, 2) + pow(b, 2) + pow(c,2)) * (pow(a, 3) + pow(b, 3) + pow(c, 3));

}

출처