Q.
1부터 6까지 숫자가 적힌 주사위가 세 개 있습니다. 세 주사위를 굴렸을 때 나온 숫자를 각각 a, b, c라고 했을 때 얻는 점수는 다음과 같습니다.
- 세 숫자가 모두 다르다면 a + b + c 점을 얻습니다.
- 세 숫자 중 어느 두 숫자는 같고 나머지 다른 숫자는 다르다면 (a + b + c) × (a2 + b2 + c2 )점을 얻습니다.
- 세 숫자가 모두 같다면 (a + b + c) × (a2 + b2 + c2 ) × (a3 + b3 + c3 )점을 얻습니다.
세 정수 a, b, c가 매개변수로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.
int answer = 0;
int first = a + b + c;
int second = (a*a) + (b*b) + (c*c);
int third = (a*a*a) + (b*b*b) + (c*c*c);
if (a == b && b == c)
answer = first * second * third;
else if (a != b && b != c && a != c)
answer = first;
else
answer = first * second;
return answer;
나에게 코드 작성에서 가장 중요한 우선순위는 가독성인 것 같다.
나중에 봤을때 이게 뭘 하는 코드인지 바로 알아볼 수 있고
다른 사람들이 봤을 때에도 어떤 코드인지 큰 노력을 들이지 않아도 되니까.
조건을 아래의 코드를 참조해 수정한다면 가독성이 더 좋아질 것 같다.
int answer = a+b+c;
if(a==b&&b==c){
answer = answer * (a*a+b*b+c*c)*(a*a*a+b*b*b+c*c*c);
}else if(a==b||a==c||b==c){
answer = answer * (a*a+b*b+c*c);
}
return answer;
Set<Integer> numbers = Stream.of(a, b, c).collect(Collectors.toSet());
return (a + b + c) *
(numbers.size() < 3 ? a * a + b * b + c * c : 1) *
(numbers.size() < 2 ? a * a * a + b * b * b + c * c * c : 1);
- a, b, c를 스트림으로 만들어 Set으로 수집합니다. 이를 통해 중복된 값은 제거됩니다.
- numbers.size()는 중복이 제거된 값들의 개수를 반환합니다.
public int calculateResult(int a, int b, int c) {
int sum = a + b + c;
int sumOfSquares = a * a + b * b + c * c;
int sumOfCubes = a * a * a + b * b * b + c * c * c;
long distinctCount = Stream.of(a, b, c).distinct().count();
if (distinctCount == 1) {
return sum * sumOfSquares * sumOfCubes;
} else if (distinctCount == 2) {
return sum * sumOfSquares;
} else {
return sum;
}
}
https://johngrib.github.io/wiki/java/stream/
[Python]
check=len(set([a,b,c]))
if check==1:
return 3*a*3*(a**2)*3*(a**3)
elif check==2:
return (a+b+c)*(a**2+b**2+c**2)
else:
return (a+b+c)
a, b, c의 중복 여부를 확인하기 위해 set을 사용하여 중복을 제거한 후 길이를 측정