728x90
문제
1부터 6까지 적힌 주사위 4개를 던져 나온 수를 매개변수 a, b, c, d로 제공하는 함수가 있다.
각 조건별로 점수를 계산하는 방법은 다음과 같다.
• 주사위에서 나온 모든 숫자 p가 같은 경우 1111 x p 점을 획득한다.
• 세 주사위에서 나온 수가 p로 같고 나머지 다른 숫자에서 나온 숫자가 q라면 (10 x p + q)² 점을 획득한다.
• 주사위 두 개씩 같은 값이 나오고, 각 수를 p, q라고 한다면 (p + q) x |p - q| 점을 획득한다.
• 어느 두 주사위에서 나온 값이 p로 같고 나머지 두 주사위에서 나온 값이 q, r로 다른 경우 q x r 점을 획득한다.
• 네 주사위의 수가 모두 다르면 나온 숫자 중 가장 작은 수의 점수를 획득한다.
네 개의 주사위 값으로 계산한 점수를 반환하는 함수를 작성해라.
예시
주사위 | 계산식 | 결과 |
[2, 2, 2, 2] | 1111 x 2 | 2222 |
[4, 1, 4, 4] | (10 x 4 x 1)² | 1681 |
[6, 3, 3, 6] | (6 + 3) x |6 - 3| | 27 |
[2, 5, 2, 6] | 5 x 6 | 30 |
[6, 4, 2, 5] | 2 | 2 |
728x90
나의 풀이
function solution(a, b, c, d) {
// 배열 생성
const arr = [a, b, c, d];
// arr배열의 중복 값 삭제 후 배열 생성
// 주사위의 숫자를 알아내기 위해서 사용
let rmDup = Array.from(new Set(arr));
// 각 숫자 갯수를 저장할 배열 생성 (4, 4, 2, 1 => [1, 1, 0, 2, 0, 0])
const dice = [0 ,0 ,0 ,0, 0, 0];
// 주사위 값으로 해당 숫자의 index에 + 1
arr.forEach((v) => dice[v-1] += 1);
// 0이 아닌 값만 넣어서 배열 생성
let tmp = dice.filter((v) => v != 0);
switch( tmp.length ) {
case 1:
return rmDup[0] * 1111;
case 2:
return (
tmp[0] === 2
? (rmDup[0] + rmDup[1]) * Math.abs(rmDup[0] - rmDup[1])
// dice에서 index의 value가 3인 index+1값을 찾아낸다(주사위 숫자)
: Math.pow((10 * (dice.indexOf(3) + 1) + (dice.indexOf(1) + 1)), 2)
);
case 3:
rmDup = rmDup.filter((v) => v !== dice.indexOf(2) + 1);
return rmDup[0] * rmDup[1];
case 4:
return rmDup.sort()[0];
}
return 0;
}
728x90
'🖥️Frontend > Programmers' 카테고리의 다른 글
[JavaScript] 부분 문자열 이어 붙여 문자열 만들기 (0) | 2024.06.07 |
---|---|
[JavaSciprt] 문자열 여러 번 뒤집기 (0) | 2024.06.05 |
[JavaScript] 콜라츠 수열 만들기 (1) | 2024.06.05 |
[JavaScript] 수열과 구간 쿼리 4 (0) | 2024.06.04 |
[JavaScript] 수열과 구간 쿼리 2 (0) | 2024.06.03 |
댓글