본문 바로가기
Javascript/자바스크립트 문제

[Javascript : programmers] 주사위 게임 1,2,3 (Lv.0) 💥

by isfp_yykkng 2024. 8. 5.

[Javascript : programmers] 주사위 게임 1,2,3 (Lv.0)

문제) 주사위 게임 1

나의 정답 풀이

function solution(a, b) {
    return a%2==0 && b%2==0 ? Math.abs(a-b) : a%2!=0 && b%2!=0 ? a**2 + b**2 : 2*(a+b) 
}

 

문제의 조건과 같이 처음에 둘 다 짝수인 경우, 그리고 아닌 경우에 둘 다 홀수인 경우를 삼항연산자로 작성한다. 둘다 아닌 둘 중 하나만 홀수인 경우를 마지막으로 처리한다.

 


문제) 주사위 게임 2

나의 정답 풀이

function solution(a, b, c) {
    return a==b && b==c ? (a+b+c)*(a**2+b**2+c**2)*(a**3+b**3+c**3) : 
    a!=b && b!=c && c!=a ? a+b+c : (a+b+c)*(a**2+b**2+c**2)
}

 

주사위 게임 1과 같이 a,b,c 모두 같은 경우와 아닌 경우를 나누고, 모두 같지 않은 경우와 아닌 경우를 나누어 코드를 작성하였다.

 


문제) 주사위 게임 3

나의 정답 풀이 💥💥💥

function solution(a, b, c, d) {
    let set = [...new Set([a,b,c,d])]
    const count = set.map((i) => [a,b,c,d].filter((element) => i === element).length); //set의 빈도수 배열
    const maxcount = Math.max(...count) //최빈값
    //모두 같은 경우
    if(set.length == 1) return 1111*a    
    //같은 값이 2개
    if(set.length == 2){
        // 2개씩 같은 경우 : 최빈값이 2
        if(maxcount == 2) return (set[0]+set[1])*Math.abs(set[0]-set[1])
        // 세개가 같고 하나 다른 경우 : 최빈값 3
        if(maxcount == 3) return (set[count.findIndex(e=>e==3)]*10 + set[count.findIndex(e=>e ==1)])**2
    }
    //2:1:1로 같은 경우
    if(set.length == 3) {
        set = set.filter(e=>e != set[count.findIndex(e=>e==2)])
        return set[0]*set[1]
    }
    //모두 다른 경우
    if(set.length == 4) return Math.min(a,b,c,d)
}

 

a,b,c,d의 중복된 개수를 알아보고자 Set로 바꾼다. Set로 바꾸게 되면 set의 길이에 따라 경우의 수를 나눌 수 있다.

 

  1. Set 의 길이 = 1 : a,b,c,d 모두 같은 경우로 1111*a (모두 같아서 아무 값이나 괜찮다.) )
  2. Set의 길이 = 2  : 또 두가지 경우의 수로 나뉜다.
    1. 입출력 예시 3과 같이 2개씩 같은 경우 : 중복을 없앤 Set를 배열로 바꾼 set 배열에 2개밖에 안들어 있기 때문에 이 둘을 그냥 사용하여 ( p+q )( |p-q| )를 반환하면 된다.
    2. 입출력 예시 2와 같이 3개 1개씩 같은 경우  : 이 경우가 까다로운데 어떤 것이 3개의 중복값을 가지고 있는지를 파악해야 한다. 이를 위해 set가 원본인 [a, b, c, d] 배열에서 몇개씩 가지고 있는지 알기 위해 count 배열을 만든다. 그리고 이 count 배열에서 3개, 1개를 가지고 있는 set 배열의 인덱스의 값을 구하고 ( 10*p + 1 ) ** 2 을 반환한다.
  3. Set의 길이 = 3 : 입출력 예시 4번과 같이 2개, 1개, 1개씩 같은 경우로 count 배열에서 2를 가지고 있지 않은 (1개씩만 같은) 경우의 수들을 filter로 걸러내어 이 둘을 곱하여 반환한다.
  4. Set의 길이 = 4 : 입출력 예시 5번과 같이 모두 다른 경우로 Math.min( a, b, c, d )를 통해 최소값을 반환한다.

<참고> 최빈값 구하기

2024.07.30 - [Javascript/자바스크립트 문제] - [Javascript : programmers] 최빈값 구하기 (Lv.0) 💥

 

[Javascript : programmers] 최빈값 구하기 (Lv.0) 💥

[Javascript : programmers] 최빈값 구하기 (Lv.0) 💥문제나의 정답 풀이 (해설 참고함)function solution(array) { const arr = [...new Set(array)]; const result = arr.map((i) => array.filter((element) => i === element).length); const m

yy-kkang.tistory.com