본문 바로가기
배움 기록/코테 연습

[프로그래머스] 주사위 게임 3 : JavaScript

by dygreen 2025. 1. 19.

📌 문제

 

📌 풀이

function solution(a, b, c, d) {
    const numbers = [a, b, c, d];
    const freqMap = {};
    
    for (let num of numbers) {
        freqMap[num] = (freqMap[num] || 0) + 1;
    }
    
    const counts = Object.values(freqMap);
    const uniqueNumbers = Object.keys(freqMap).map(Number);
    
    if (counts.includes(4)) {
        const p = uniqueNumbers
        return 1111 * p
    }
    
    if (counts.includes(3)) {
        const p = parseInt(Object.keys(freqMap).find(key => freqMap[key] === 3));
        const q = parseInt(Object.keys(freqMap).find(key => freqMap[key] === 1));;
        return Math.pow(10 * p + q, 2)
    }
    
    if (counts.filter(count => count === 2).length === 2) {
        const [p, q] = uniqueNumbers.sort((a,b) => b - a);
        return (p + q) * Math.abs(p - q);
    }
    
    if (counts.includes(2)) {
        const p = parseInt(Object.keys(freqMap).find(key => freqMap[key] === 2));
        const others = uniqueNumbers.filter(num => num !== p);
        const [q, r] = others;
        return q * r;
    }
    
    return Math.min(...numbers);
}
  • for..of 반복문을 통해 각 숫자의 출현 빈도를 freqMap 객체에다가 담는다
  • Object.valuesObject.keys 를 통해 객체의 key, value 각각을 담은 배열을 통해 각 조건을 확인하고 계산한다

 

  • Math.pow(base, exponent) : base 에 exponent 를 제곱한 값을 반환한다
  • Math.abs() : 숫자의 절대 값을 반환한다
  • Math.min() : 매개변수로 주어진 숫자 중 가장 작은 수를 반환한다

 

728x90

댓글