Coding Test/Java Coding Test

[프로그래머스 / 자바] - 주사위 게임 2

nam_ji 2024. 6. 6. 18:30

주사위 게임 2

문제

  • 정수 a, b, c가 매개변수로 주어집니다.
  • a, b, c는 1 ~ 6까지인 주사위 3개가 있다고 했을 때,
  • 그 3개 주사위를 굴렸을 때 나오는 값을 의미합니다.
  • 이때,
    1. 세 숫자가 모두 다르다면 a + b + c점
    2. 셋 숫자 중 두 숫자만 같다면 (a + b + c) × (a^2 + b^2 + c^2)점
    3. 세 숫자가 모두 같다면 (a + b + c) × (a^2 + b^2 + c^2 ) × (a^3 + b^3 + c^3 )점을 얻습니다.
  •  요구사항에 맞게 점수를 출력하는 문제입니다.
  • a b c result
    2 6 1 9
    5 3 3 473
    4 4 4 110592


테스트 (인텔리제이)

  • 3가지 조건을 위해 if문을 사용합니다. 
  • 그리고 Math 클래스의 pow 메서드를 이용하여 제곱을 계산합니다.
  • 여기서 제곱은 동일 코드가 생기기 때문에 따로 메서드를 빼서 작성했습니다. 빼는 과정에 세제곱 메서드도 따로 만들어 반환받게 했습니다.
  • 풀이를 마치고 다른사람 풀이를 봤는데 더 간결해 보이는 코드가 있어 가져와 봤습니다.
  • pow 메서드를 사용하지 않고 같은 값을 2번 3번 곱하게 하는 방법이며, a + b + c는 3조건 모두 해당되는 계산식이기 때문에 answer 변수에 a + b + c로 초기화 해두고 if문으로 두 숫자만 같은 경우 하나와 세 수가 모두 같은 경우 두가지만 제어하게 하고 두 조건에 해당하지 않으면 answer를 출력하게 한 풀이였습니다.
import java.util.Scanner;

public class 주사위_게임_2 {
  public static void main(String[] args) {
    /*
    정수 a, b, c가 매개변수로 주어집니다.
    a, b, c는 1 ~ 6까지인 주사위 3개가 있다고 했을 때,
    그 3개 주사위를 굴렸을 때 나오는 값을 의미합니다.
    이때,
      1. 세 숫자가 모두 다르다면 a + b + c점
      2. 셋 숫자 중 두 숫자만 같다면 (a + b + c) × (a^2 + b^2 + c^2)점
      3. 세 숫자가 모두 같다면 (a + b + c) × (a^2 + b^2 + c^2 ) × (a^3 + b^3 + c^3 )점을 얻습니다.
    요구사항에 맞게 점수를 출력하는 문제입니다.
    a	  b	  c	  result
    2	  6	  1 	9
    5	  3	  3 	473
    4	  4	  4 	110592
     */
    Scanner in = new Scanner(System.in);
    int a = in.nextInt();
    int b = in.nextInt();
    int c = in.nextInt();
    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 || b == c || a == c) {
      answer = answer * (a * a + b * b + c * c);
    }

    System.out.println(answer);

//    if (a == b && b == c) {
//      System.out.println((a+b+c) * mathTwoPow(a, b, c) * mathThreePow(a, b, c));
//    } else if (a != b && b != c && a != c) {
//      System.out.println(a + b + c);
//    } else {
//      System.out.println((a+b+c) * mathTwoPow(a, b, c));
//    }
//  }
//
//  private static int mathTwoPow(int a, int b, int c) {
//    return (int) (Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2));
//  }
//
//  private static int mathThreePow(int a, int b, int c) {
//    return (int) (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3));
//  }
  }
}


프로그래머스 코드

class Solution {
    public int solution(int a, int b, int c) {
        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 || b == c || a == c) {
            answer = answer * (a * a + b * b + c * c);
        }

        return answer;
    }
}

// class Solution {
//     public int solution(int a, int b, int c) {
        
//         if (a == b && b == c) {
//             return (a+b+c) * mathTwoPow(a, b, c) * mathThreePow(a, b, c);
//         } else if (a != b && b != c && a != c) {
//             return a + b + c;
//         } else {
//             return (a+b+c) * mathTwoPow(a, b, c);
//         }
//     }
    
//     private static int mathTwoPow(int a, int b, int c) {
//         return (int) (Math.pow(a, 2) + Math.pow(b, 2) + Math.pow(c, 2));
//     }

//     private static int mathThreePow(int a, int b, int c) {
//         return (int) (Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3));
//     }
// }

주석처리된 코드 결과
주석없는 코드 결과