주사위 게임3

이리·2025년 1월 31일
0

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

문제설명

  • 주어진 파라미터: int a, int b, int c, int d
  • 반환값: int
  • a,b,c,d
    • 4개 모두 같다면 1111 x p
    • 3개만 같다면 (10p+q)2(10 * p + q)^2
    • 2개씩 같은 값이 나온다면 (p+q)pq(p + q) * |p-q|
    • 2개 같고 q, r 이면 qrq * r
    • 모두 다르다면 가장 작은 숫자만큼

풀이방식

  1. Map에 <Integer, Integer> 형태로 숫자, 개수 저장
  2. 개수 내림차순으로 정렬 후 하나씩 꺼내면서 어떤 케이스인지 적용

코드

import java.util.*;

class Solution {
    public int solution(int a, int b, int c, int d) {
        int p, q, r, cnt;
        Map<Integer, Integer> m = new HashMap<>();
        int[] list = new int[]{a,b,c,d};

        for(int i : list){
            m.put(i, m.getOrDefault(i, 0) + 1);
        }

        List<Map.Entry<Integer, Integer>> entry = new ArrayList<>(m.entrySet());
        entry.sort((e, f) -> f.getValue() - e.getValue());

        int key = entry.get(0).getValue();
        if(key == 4){
            // 1111 x p 
            return 1111 * entry.get(0).getKey();
        }else if(key == 3){
            // (10 × p + q)2
            p = entry.get(0).getKey();
            q = entry.get(1).getKey();
            return (10 * p + q)*(10 * p + q);
        }else if(key == 2){
            if(entry.get(1).getValue() == 2){
                // (p + q) * |p-q|
                p = entry.get(0).getKey();
                q = entry.get(1).getKey();
                return (p + q) * Math.abs(p-q);
            }
            
            // q * r 
            return entry.get(1).getKey() * entry.get(2).getKey();
        }

        entry.sort((e,f)-> f.getKey() - e.getKey());
        return entry.get(3).getKey();
    }
}

회고

인덱스를 다루는 것은 항상 항상 항상 OutOfBoundsException
를 주의해야합니다. 꼼꼼히 범위를 체크하도록!

0개의 댓글

관련 채용 정보