Programmers
[프로그래머스][JS] 주사위 게임 3
winter17
2023. 7. 7. 11:38
https://school.programmers.co.kr/learn/courses/30/lessons/181916
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(a, b, c, d) {
var answer = 0;
const dice = [a, b, c, d]
let obj = {} // 객체 생성
for (let i = 0; i < dice.length; i++){
if (obj[dice[i]]){
obj[dice[i]]++
}else{
obj[dice[i]] = 1
}
}
const arr = Object.keys(obj) // key값만 추출
const keys = arr.map(item => parseInt(item)) // key값을 정수로 바꾸기
const values = Object.values(obj)
if (values.length === 1){ // 전부 같은 경우
answer = 1111 * keys[0]
return answer
}else if(values.length === 2){
if (values[0] === 2){ // 두 개씩 같은 경우
answer = (keys[0] + keys[1]) * Math.abs(keys[0] - keys[1])
return answer
}else{ // 세 개가 같은 경우
if (values[1] === 3){
answer = (10 * keys[1] + keys[0]) **2
return answer
}else{
answer = (10 * keys[0] + keys[1]) **2
return answer
}
}
}else if (values.length === 3){ // 두 개가 같고 나머지 두 개는 다른 경우
answer = 1
for (let i = 0; i < values.length; i++){
if (values[i] === 1){
answer *= keys[i]
}
}
return answer
}else{ // 모두 다른 경우
answer = Math.min(...keys)
return answer
}
}
조건이 총 5개이다
1. 모두 같은 경우(p) → 1111 * p
2. 세 개가 같고(p), 하나가 다른 경우(q) → (10 * p + q) ** 2
3. 두 개 같고(p), 두 개 같고(q) → (p + q) * |p - q|
4. 두 개가 같고(p), 다른 하나(q), 또 다른 하나(r) → q * r
5. 모두 다른 경우 → 가장 작은 것 반환
리뷰
모든 경우의 수를 체크해줘야 하는데 풀면서도 이런 방법밖에 없나... 하면서 풀었다.