단순하게 if로 풀었는데, 좋은 풀이가 있어서 공부해보려고 함.
class Solution {
public int solution(int a, int b, int c) {
double answer = 0;
if(a == b && b == c) {
answer = (a + b + c) * (Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2) ) * (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3) );
} else if(a!=b && a!=c && c!=b) {
answer = a + b + c;
} else {
answer = (a + b + c) * (Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2));
}
return (int)(answer);
}
}
pow() 메서드를 생성했다고 봐도 좋지만, 기본 Math.pow()가 있으니까 오버라이드 했다고 해야 더 정확하겠지.
class Solution {
public int solution(int a, int b, int c) {
int answer = 1;
int count = 1;
if(a == b || a == c || b == c) {
count++;
}
if(a == b && b == c) {
count++;
}
for(int i = 1; i <= count; i++) {
answer *= (pow(a,i)+pow(b,i)+pow(c,i));
}
return answer;
}
private int pow(int a, int b) {
if(b == 0) return 1;
return a * pow(a, b-1);
}
}
- a, b, c가 서로 다르면 1, 한쌍이라도 같으면 2, 셋 모두 같으면 3으로 count 할당, 이를 for문 기준 삼음.
- 각 조건에 따라 세 정수에 일, 이, 삼제곱을 한다음 그 합을 곱한다는 것을 이용하여 for문 수행문 작성.
→ 문제에서 주어진 조건과 상황을 면밀히 파악해서 풀었네... 멋있다... pow() 오버라이드 해서 double 반환 안되고 걍 정수로 반환되게 한 것도 좋은 아이디어... 안 그랬다면 for문 안에서 answer에 할당할 때마다 명시적 형변환 해주거나 answer를 double로 선언한 뒤 바꾸는 (내 방식) 작업이 필요했을 것. pow()를 재귀적으로 구성한 것도 눈에 띠는데, 원래 메서드가 저런 모양인지 모르겠지만 재귀 잘 못쓰는 나로서는 저것도 멋있음 ㅋㅋㅋㅋ
'Study with me > 프로그래머스 L0 마스터하기' 카테고리의 다른 글
프로그래머스 - L0 문자열정렬하기(2) // String ↔ char[] (1) | 2024.01.13 |
---|---|
프로그래머스 - L0 숫자찾기 (0) | 2024.01.12 |
프로그래머스 - L0 문자열잘라서정렬하기 // sort() & split() (0) | 2024.01.10 |
프로그래머스 - L0 외계행성의나이 (0) | 2024.01.09 |
프로그래머스 - L0 문자리스트를문자열로반환하기 // join String (1) | 2024.01.08 |