일일히 조건 나눠가며 풀기
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));
}