코딩일지
작성자 | |||
성 명 | 최주희 | 작성일자 | 2022.02.01 |
세부 코딩 내용 | |||
활동 기간 | 2022.02.01 | ||
문제 | 머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요. | ||
나의 풀이 | function solution(balls, share) { let ballsResult = "1"; let ballsShareResult = "1" let shareResult = "1" for(let i=1; i<balls+1;i++){ ballsResult*=i; } for(let i=1; i< (balls - share)+1;i++){ ballsShareResult*=i; } for(let i=1; i<share+1;i++){ shareResult*=i; } return ballsResult/(ballsShareResult*shareResult) } |
function solution(balls, share) { let ballsResult = "1"; let ballsShareResult = "1" let shareResult = "1" for(let i=1; i<balls+1;i++){ ballsResult*=i; } for(let i=1; i< (balls - share)+1;i++){ ballsShareResult*=i; } for(let i=1; i<share+1;i++){ shareResult*=i; } return Math.round(ballsResult/(ballsShareResult*shareResult)) } |
|
결과 | 몫이 소수점이 나오는 상황 오류 | 통과 | |
다른 풀이 | const 팩토리얼 = (num) => num === 0 ? 1 : num * 팩토리얼(num - 1) function solution(balls, share) { return Math.round(팩토리얼(balls) / 팩토리얼(balls - share) / 팩토리얼(share)) } |
function solution(balls, share) { const [n, m] = [balls, share]; const fact = [BigInt(1), BigInt(1)]; for (let i = 2; i <= n; i++) fact[i] = fact[i - 1] * BigInt(i); return Number(fact[n] / (fact[n - m] * fact[m])); } // 많은 사람들의 답 |
|
해석 | 재귀 함수 사용 | ||
키워드 | 코딩내용 | 생각 | |
1. 필요한 조건 정리
2. 풀이단계 정리
|
하나하나 모든 걸 풀어가며 풀었던 문제 였던 것 같다. 어려운 듯 쉬웠다. 더 쉬운 공식을 사용하는 방법을 몰라서 어려웠고 어떤 식으로 쓰면 될지 감이 와서 쉬웠다. 하지만 내 식은 너무나 길었고 다른 풀이를 보고 너무나도 대단하다는 생각이 들었다. 저런 식을 보고 항상 저렇게 풀 수 있구나 생각이 드는데 왜 항상 그런 생각을 하면서 왜 저런 생각이 잘 나지 않는 걸까 하는 의문이 든다. 아마도 더 많은 문제들을 접해봐야겠지…? 재귀 함수는 정말 어렵지만 정말 효율적인 함수 인 것 같다. 꼭 기억해둬야겠다. |
||
'프론트엔드로 가는 길 > 프로그래머스' 카테고리의 다른 글
34. 프로그래머스_공던지기 (0) | 2023.02.04 |
---|---|
33. 프로그래머스_점 위치 구하기 (0) | 2023.02.02 |
31. 프로그래머스_가위바위보 (0) | 2023.01.31 |
31. 프로그래머스_모스부호(1) (0) | 2023.01.30 |
30. 프로그래머스 _개미 군단 (0) | 2023.01.29 |