본문 바로가기

Java/프로그래머스

[JAVA] 프로그래머스 - 주사위 게임 3

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

 

프로그래머스

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

programmers.co.kr

 

 

 

 

 

정답 

 

import java.util.Arrays;

class Solution {
   
    public int solution(int a, int b, int c, int d) {
        int answer = 0;  
        int list[] = {a,b,c,d};
        
        Arrays.sort(list); //오름차순 정렬
        
        //모두 같은 경우
        if(list[0] == list[3])
        {
            return 1111*list[0];
        }      
        //세 주사위가 같은 경우
        else if(list[0] == list[2])
        {
            return (int)Math.pow((10*list[0]+list[3]),2);
        }        
        else if(list[1]== list[3])
        {
            return (int)Math.pow((10*list[1]+list[0]),2);
        }       
        //두 개씩 같을 경우 
        else if(list[0] == list[1] && list[2]==list[3])
        {
            return (list[0] + list[2])*Math.abs(list[0] - list[2]);
        }
        //두 개만 같고, 나머지는 각각 다를 경우 
        else if(list[0] == list[1] || list[1] == list[2] || list[2] == list[3])
        {
            if(list[0] == list[1])
            {
                return list[2]*list[3];
            }
            else if(list[1] == list[2])
            {
                return list[0]*list[3];
            }
            else
            {
                return list[0]*list[1];
            }
        }
        //모두 다른 경우 
        else
        {
            return list[0];
        }
        
    }
}

 

 

다른 사람의 풀이 

 

import java.util.*;

class Solution {
    public int solution(int a, int b, int c, int d) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int data : new int[] {a, b, c, d}) {
            if (map.containsKey(data)) map.put(data, map.get(data) + 1);
            else map.put(data, 1);
        }

        PriorityQueue<Dice> pq = new PriorityQueue<>();
        for (int key : map.keySet())
            pq.add(new Dice(key, map.get(key)));

        int answer = 0;
        if (pq.size() == 1) answer = pq.poll().number * 1111;
        else if (pq.size() == 3) {
            pq.poll();
            answer = pq.poll().number * pq.poll().number;
        } else if (pq.size() == 4) {
            pq.poll(); pq.poll(); pq.poll();
            answer = pq.poll().number;
        } else {
            Dice maxDice = pq.poll();
            Dice next = pq.poll();
            if (maxDice.count == 3) {
                answer = (10 * maxDice.number + next.number) * (10 * maxDice.number + next.number);
            } else {
                answer = (maxDice.number + next.number) * ((int)(Math.abs(maxDice.number - next.number)));
            }
        }
        return answer;
    }

    public class Dice implements Comparable<Dice> {
        int number;
        int count;
        public Dice(int number, int count) {
            this.number = number;
            this.count = count;
        }

        @Override
        public int compareTo(Dice o) {
            if (this.count == o.count)
                return o.number - this.number;
            return o.count - this.count;
        }
    }
}