https://school.programmers.co.kr/learn/courses/30/lessons/181916
얼마전 접했던 '야추 다이스' 라는 보드게임의 룰이 생각났다.
우선 조건문 4개가 나오면 될 것 같고.,
2,3,4번 조건은 그 안에서 조건문을 파생시켜 구현해야 할 것 같다.
초기 코드
function solution(a, b, c, d) {
let arr = [a,b,c,d]
let set = [...new Set(arr)]
if(set.length==1) {
return 1111*a
} else if(set.length==2) {
return '두개 같'
} else if(set.length==3) {
return '세개 같'
} else if(set.length==4) {
return Math.min(...arr)
}
}
뭔가 set 자료형을 이용해서 중복된 요소를 구한다는 건 알겠는데... 여기서 막혔다.
한 시간 가량 고민해본 결과
set과 arr의 뺄셈을 이용하면 코드가 지저분해지긴 하지만
어쨋든 기능구현은 할 수 있을 것 같았다.
최종 코드
function solution(a, b, c, d) {
let arr = [a,b,c,d]
let set = [...new Set(arr)]
if(set.length==1) {
return 1111*a
} else if(set.length==2) {
if(arr.reduce((acc, init)=>acc+=init,0) / set.reduce((acc, init)=>acc+=init,0)==2) {
return Math.abs(set[0]**2-set[1]**2)
} else {
let l = (arr.reduce((acc, init)=>acc+=init,0) - set.reduce((acc, init)=>acc+=init,0))/2;
let res = arr.filter((a)=>a !== l);
return (10*l+res[0])**2
}
} else if(set.length==3) {
let l = arr.reduce((acc, init)=>acc+=init,0) - set.reduce((acc, init)=>acc+=init,0);
let res = arr.filter((a)=>a !== l);
return res[0]*res[1]
} else if(set.length==4) {
return Math.min(...arr)
}
}
알고리즘 적으로 썩 좋지 못한 코드...같지만
꽤 낮은 정답률의 문제를 풀었다는 것에 의의를 두고
다른 사람의 풀이를 보며 배울 점을 찾아보자
다른 사람의 풀이
function solution(a, b, c, d) {
if (a === b && a === c && a === d) return 1111 * a
if (a === b && a === c) return (10 * a + d) ** 2
if (a === b && a === d) return (10 * a + c) ** 2
if (a === c && a === d) return (10 * a + b) ** 2
if (b === c && b === d) return (10 * b + a) ** 2
if (a === b && c === d) return (a + c) * Math.abs(a - c)
if (a === c && b === d) return (a + b) * Math.abs(a - b)
if (a === d && b === c) return (a + b) * Math.abs(a - b)
if (a === b) return c * d
if (a === c) return b * d
if (a === d) return b * c
if (b === c) return a * d
if (b === d) return a * c
if (c === d) return a * b
return Math.min(a, b, c, d)
}
정말 순 노가다지만
성능 면에서든 가독성에서든 위 코드가 제일 나았다.
때로는 노가다로 나열해서 푼 코드가
함수 덕지덕지 붙인 코드보다 낫다는 것 깨닫게 해준 문제.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / <PCCP 기출문제> / 1번 - 동영상 재생기 (0) | 2024.12.16 |
---|---|
[JS] 프로그래머스 / 푸드 파이트 대회 (0) | 2024.12.14 |
[JS] 프로그래머스 / 크기가 작은 부분 문자열 (0) | 2024.12.13 |
[JS] 프로그래머스 / 배열 만들기 2 (0) | 2024.12.09 |