머쓱이는 구슬을 친구들에게 나누어주려고 합니다. 구슬은 모두 다르게 생겼습니다. 머쓱이가 갖고 있는 구슬의 개수 balls와 친구들에게 나누어 줄 구슬 개수 share이 매개변수로 주어질 때, balls개의 구슬 중 share개의 구슬을 고르는 가능한 모든 경우의 수를 return 하는 solution 함수를 완성해주세요.
쉽게 말해 경우의 수에서 조합식을 만드는 것이다 그래서 공식에 대해 검색하고 이 때 사용되는 공식이 펙토리얼을 사용하기에 반복문으로 쉽게 만들고 사용해 주었다
그래서 실행 결과는 문제가 없었으나 제출 과정에서 문제 발생 원인을 생각하다 작은 수에선 문제 없었으니 큰 수를 테스트 해보니까 문제 발견 그 당시 예상으론 숫자값이 너무 커서 그런 것 같았다
바로 검색 BigInt라는 큰 값을 저장할 수 있는 방법을 찾아서 적용했다 팩토리얼 값이 저장되는 곳에만 사용하면 될 줄 알았으나 반복문에서 계속 곱해주는 i에도 적용해야 문제가 없이 돌아갔다
이렇게 끝내고 다른 사람들 답을 봤는데 Math.round()를 사용했기에 찾아보니 우리가 사용하는 10진수와 컴퓨터가 사용하는 2진수의 변환 과정에서 소수점이 무한 소수가 되고 아무튼 그래서 정확한 계산이 안나온다고 해서 반올림으로 근사치로 만들어 준다는 것이었다 컴퓨터도 완벽하진 못하고 사람이 그 컴퓨터의 문제까지 생각해줘야 한다
숫자 값이 너무 클 때는 위에 메서드를 사용해야겠다
'오늘 뭐했냐 > 기억하면 좋을 문제들' 카테고리의 다른 글
정해진 수의 반복 (0) | 2023.06.14 |
---|---|
이차원 배열 만들기 splice(), slice()차이 (0) | 2023.06.14 |
객체 활용 (0) | 2023.06.13 |
모스 부호 (0) | 2023.06.13 |
배열 복사, indexOf (0) | 2023.06.13 |