study gomi

[프로그래머스/Programmers] 코딩 기초 트레이닝 > 주사위 게임3 (자바 Java) 본문

Practice/Programmers

[프로그래머스/Programmers] 코딩 기초 트레이닝 > 주사위 게임3 (자바 Java)

공부하곰 2024. 8. 20. 13:22
728x90
반응형

문제

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

 

프로그래머스

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

programmers.co.kr

 

내 제출

import java.util.HashSet;
import java.util.Set;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;

class Solution {
    public int solution(int a, int b, int c, int d) {
        int answer = 0;
        List<Integer> dice = Arrays.asList(a, b, c, d);
        Collections.sort(dice);
        
        Set<Integer> dice_set = new HashSet<>();
        Collections.addAll(dice_set, a, b, c, d);
        int setSize = dice_set.size();
        
        List<Integer> dice_list = new ArrayList<>(dice_set);
        // Collections.sort(dice_list);
        
        if(setSize == 1){answer = 1111 * a;}
        else{
            int d1 = dice_list.get(0);
            int d2 = dice_list.get(1);
            int d1_cnt = Collections.frequency(dice, d1);
            int d2_cnt = Collections.frequency(dice, d2);
            // System.out.printf("d1 id %d, d1_cnt is %d\n", d1, d1_cnt);
            // System.out.printf("d2 id %d, d2_cnt is %d\n", d2, d2_cnt);
            
            if(setSize == 2){
                int gap = Math.max(d1, d2) - Math.min(d1, d2);
            
                switch(d1_cnt){
                    case 1 :
                        answer = (int) Math.pow((10 * d2 + d1), 2);
                        break;
                    case 2:// 두 개 - 두 개씩 같음
                        answer = (d1 + d2) * gap;
                        break;
                    case 3:
                        answer = (int) Math.pow((10 * d1 + d2), 2);
                        break;
                }
            }
            else if(setSize == 3){
                int d3 = dice_list.get(2);

                // a, b 같고 c, d 각자
                if (d1_cnt == 2){
                    answer = d2 * d3;
                } else if(d2_cnt == 2){
                    answer = d1 * d3;
                } else{
                    answer = d1 * d2;
                }
            }
            else{answer = d1;}
        }
        
        return answer;
    }
}

 

참고

정렬 : https://80000coding.oopy.io/21cb57a3-681b-404d-a4ac-8ab0e7289bc0

 

[JAVA] Sort 사용 (Arrays, Collections)

Java’s Sort

80000coding.oopy.io

거듭제곱 : https://coding-factory.tistory.com/531

 

[Java] 자바 거듭 제곱 구하기 Math.pow()

자바에서 특정값의 제곱을 구하려면 java.lang.Math 클래스의 pow()메소드를 사용하면 됩니다. java.lang.Math 클래스는 수학 계산에 사용할 수 있는 메소드를 제공하고 있습니다. Math 클래스가 제공하는

coding-factory.tistory.com

집합 : https://blog.naver.com/heartflow89/220994601249

 

[JAVA/자바] Set - HashSet, TreeSet, LinkedHashSet

 이전에 알아본 List(ArrayList, Vector, LinkedList) 컬렉션과는 다른 특징들을 갖는 Set 컬...

blog.naver.com

 

728x90
반응형