https://school.programmers.co.kr/learn/courses/30/lessons/131705
고등학교 수학에서 배운 '조합' 개념을
코딩으로 어떻게 구현 하는가가 관건.
function solution(number) {
let len = number.length
for(let i=2**(len-1); i<2**len; i++) {
let twoString = [...i.toString(2)]
if(twoString.filter(x=>x==='1').length===3) {
console.log(twoString)
}
}
}
조합 개념을 어떻게 구현하지 곰곰히 생각하다가
처음에 떠올랐던 것이 이진수 개념이다.
자릿수가 같은 이진수의 범위를 정하고 1이 3개 있는 이진수를 뽑아내면 되지 않을까?
싶었지만.. 우선 처음에 0이 오는 경우를 빼먹었을 뿐더러
코드가 너무 무거워지기 때문에 패스.
최종 풀이
unction solution(number) {
let answer = 0;
let len = number.length
for (let i=0; i<len-2; i++) {
for(let j=i+1; j<len-1; j++) {
for(let k=j+1; k<len; k++) {
answer += number[i]+number[j]+number[k]===0 ? 1 : 0
}
}
}
return answer
}
이게 되네?
앞서 이중 for문의 비효율성을 충분히 경험했기 때문에
삼중 for문은 생각도 못하고 다른 방법부터 찾아다녔다.
조심스레 짜본 코드가 잘 작동되서 신기했다.
다중 for문이라도 연산이 짧으면 성능이 그렇게 저하되는 건 아닌 것 같다.
다른 사람의 풀이
function solution(number) {
let result = 0;
const combination = (current, start) => {
if (current.length === 3) {
result += current.reduce((acc, cur) => acc + cur, 0) === 0 ? 1 : 0;
return;
}
for (let i = start; i < number.length; i++) {
combination([...current, number[i]], i + 1);
}
}
combination([], 0);
return result;
}
재귀 함수를 이용한 풀이.
아직 재귀함수가 익숙치 않아서 있지 코드 이해하는 데 애를 먹었다.
재귀 함수와 정규식은 꼭 마스터 할 것이다.
'Coding Test' 카테고리의 다른 글
[JS] 프로그래머스 / 짝지어 제거하기 (0) | 2025.01.10 |
---|---|
[JS] 프로그래머스 / 숫자의 표현 (0) | 2025.01.09 |
[JS] 프로그래머스 / 바탕화면 정리 (0) | 2024.12.23 |
[JS] 프로그래머스 / 대충 만든 자판 (0) | 2024.12.21 |
[JS] 프로그래머스 / 덧칠하기 (0) | 2024.12.21 |