[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의 길이에 따라 경우의 수를 나눌 수 있다.
- Set 의 길이 = 1 : a,b,c,d 모두 같은 경우로 1111*a (모두 같아서 아무 값이나 괜찮다.) )
- Set의 길이 = 2 : 또 두가지 경우의 수로 나뉜다.
- 입출력 예시 3과 같이 2개씩 같은 경우 : 중복을 없앤 Set를 배열로 바꾼 set 배열에 2개밖에 안들어 있기 때문에 이 둘을 그냥 사용하여 ( p+q )( |p-q| )를 반환하면 된다.
- 입출력 예시 2와 같이 3개 1개씩 같은 경우 : 이 경우가 까다로운데 어떤 것이 3개의 중복값을 가지고 있는지를 파악해야 한다. 이를 위해 set가 원본인 [a, b, c, d] 배열에서 몇개씩 가지고 있는지 알기 위해 count 배열을 만든다. 그리고 이 count 배열에서 3개, 1개를 가지고 있는 set 배열의 인덱스의 값을 구하고 ( 10*p + 1 ) ** 2 을 반환한다.
- Set의 길이 = 3 : 입출력 예시 4번과 같이 2개, 1개, 1개씩 같은 경우로 count 배열에서 2를 가지고 있지 않은 (1개씩만 같은) 경우의 수들을 filter로 걸러내어 이 둘을 곱하여 반환한다.
- 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
'Javascript > 자바스크립트 문제' 카테고리의 다른 글
[Javascript] 이차원, 다차원 배열 생성법 (0) | 2024.08.06 |
---|---|
[Javascript : programmers] 특별한 이차원 배열 1,2 (Lv.0) (0) | 2024.08.06 |
[Javascript : programmers] 최댓값 만들기 1,2 (Lv.0) (0) | 2024.08.05 |
[Javascript : programmers] 덧셈식 출력하기 (Lv.0) (0) | 2024.08.05 |
[Javascript : programmers] 문자열 붙여서 출력하기 (Lv.0) (0) | 2024.08.05 |