본문 바로가기
Study with me/프로그래머스 L0 마스터하기

프로그래머스 - L0 주사위게임2

by 외계나무 2024. 1. 11.

프로그래머스 - level 0 주사위 게임 2

단순하게 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()를 재귀적으로 구성한 것도 눈에 띠는데, 원래 메서드가 저런 모양인지 모르겠지만 재귀 잘 못쓰는 나로서는 저것도 멋있음 ㅋㅋㅋㅋ