코딩테스트연습/[프로그래머스] Java

[프로그래머스] Java 코딩테스트 연습 - 주사위 게임 3

_꼬마돌 2023. 8. 6. 19:07
반응형

[프로그래머스] Java 코딩테스트 연습 - 주사위 연습 3

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/181916

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

문제

1부터 6까지 숫자가 적힌 주사위가 네 개 있습니다. 네 주사위를 굴렸을 때 나온 숫자에 따라 다음과 같은 점수를 얻습니다.

- 네 주사위에서 나온 숫자가 모두 p로 같다면 1111 × p점을 얻습니다.
- 세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q(p ≠ q)라면 (10 × p + q)2 점을 얻습니다.
- 주사위가 두 개씩 같은 값이 나오고, 나온 숫자를 각각 p, q(p ≠ q)라고 한다면 (p + q) × |p - q|점을 얻습니다.
- 어느 두 주사위에서 나온 숫자가 p로 같고 나머지 두 주사위에서 나온 숫자가 각각 p와 다른 q, r(q ≠ r)이라면 q × r점을 얻습니다.
- 네 주사위에 적힌 숫자가 모두 다르다면 나온 숫자 중 가장 작은 숫자 만큼의 점수를 얻습니다.

네 주사위를 굴렸을 때 나온 숫자가 정수 매개변수 a, b, c, d로 주어질 때, 얻는 점수를 return 하는 solution 함수를 작성해 주세요.

 

풀이

if 문으로 문제에 맞게 조건문 코드를 작성했다. 
중간에 절대값 계산이 필요한 부분에는 Math.abs()메서드를 사용했고,
최소값을 찾아야 하는 부분에서는 Math.min()메서드를 사용했다. Math.min()메서드는 두 수의 대소를 구분할 수 있기 때문에 Math.min(Math.min(a ,b), Math.min(c, d)) 형식으로 호출하여 4개의 수 중 가장 작은 수를 찾을 수 있게 했다.

 

소스코드

class Solution {
    public int solution(int a, int b, int c, int d) {
        
        if (a == b && b == c && c == d) { // abcd 모두 같다면
            return 1111 * a; 
        } else if (a == b && b == c) { // abc만 같다면
            return ((10 * a + d) * (10 * a + d)); 
        } else if (a == c && c == d) { // acd만 같다면
            return ((10 * a + b) * (10 * a + b));
        } else if (a == b && b == d) { // abd만 같다면
            return ((10 * a + c) * (10 * a + c));
        } else if (b == c && c == d) { // bcd만 같다면
            return ((10 * b + a) * (10 * b + a));
        } else if (a == b && c == d) { // ab가 같고 cd가 같다면
            return ((a + c) * (Math.abs(a - c)));
        } else if (a == c && b == d) { // ac가 같고 bd가 같다면
            return ((a + b) * (Math.abs(a - b)));
        } else if (a == d && b == c) { // ad가 같고 bc가 같다면
            return ((a + b) * (Math.abs(a - b)));
        } else if (a == b && c != d) { // ab가 같고 cd가 다르다면
            return (c * d);
        } else if (a == c && b != d) { // ac가 같고 bd가 다르다면
            return (b * d);
        } else if (a == d && b != c) { // ad가 같고 bc가 다르다면
            return (b * c);
        } else if (b == c && a != d) { // bc가 같고 ad가 다르다면
            return (a * d);
        } else if (b == d && a != c) { // bd가 같고 ac가 다르다면
            return (a * c);
        } else if (c == d && a != b) { // cd가 같고 ab가 다르다면
            return (a * b);
        } else {
            return Math.min(Math.min(a, b), Math.min(c, d));
        }
    }
}

 

반응형