티스토리 뷰

문제출처

 

프로그래머스

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

programmers.co.kr


문제

 

입출력 예

 

소스코드

import java.util.*;
class Solution {
    public int solution(int a, int b, int c, int d) {
        int dice[] = {a,b,c,d};
        Arrays.sort(dice);
        int ans = 0;
        
        if(dice[0] == dice[3]){
            ans = 1111 * dice[0];
        }else if(dice[0] == dice[2] || dice[1] == dice[3]){
            ans = (int)Math.pow(10 * dice[2] + (dice[0]+dice[3]-dice[3]),2);
        }else if(dice[0] == dice[1] && dice[2] == dice[3]){
            ans = (dice[0] + dice[2]) * (dice[3]-dice[0]);
        }else if(dice[0] == dice[1]){
            ans = dice[2] * dice[3];
        }else if(dice[1] == dice[2]){
            ans = dice[0] * dice[3];
        }else if(dice[2] == dice[3]){
            ans = dice[0] * dice[1];
        }else{
            ans = dice[0];
        }
        
        return ans;
    }
}

 

풀이

주사위를 굴러 나온 숫자 a,b,c,d를 Arrays.sort 메서드를 이용해 정렬하여 풀어봤다.

세 주사위에서 나온 숫자가 p로 같고 나머지 다른 주사위에서 나온 숫자가 q라면 [ p, p, p, q ] || [ q, p, p, p ] 2가지 경우의 수가 존재한다. 다른 주사위에서 나온 숫자를 구할려면 서로 다른 첫번째 idx, 마지막 idx의 합에서 두가지 경우의 수가 다 들어맞는 두번째 idx를 빼주면된다.