페블_
반짝이는 시냅스
페블_
전체 방문자
오늘
어제
  • 전체글 보기 (96)
    • QA (0)
    • 프로젝트 회고 (4)
    • 프로젝트 과정 기록 (12)
    • UI 구현 연구일지 (8)
    • Front-end (31)
      • Javascript (7)
      • CSS (10)
      • React (5)
      • Typescript (3)
      • Nextjs (3)
      • 스타일링 라이브러리 (3)
    • Back-end (0)
      • Express (0)
      • DB (0)
    • CS (0)
      • 자료구조 & 알고리즘 (0)
    • CI&CD (1)
    • 툴 사용법 (4)
      • Git (1)
      • Library&패키지 (2)
      • 기타 개발관련 (1)
    • 알고리즘 이론 & 풀이 (36)
      • 백준(BOJ) (14)
      • 프로그래머스 (22)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 백준
  • 선형대수학
  • emotion
  • storybook
  • 개발블로그_시작
  • 시리즈_표지
  • react
  • 알고리즘
  • 토이프로젝트
  • JS
  • TypeScript
  • eslint
  • chartjs
  • 캐러셀
  • UI 컴포넌트
  • Python
  • 생각
  • 파이썬

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
페블_

반짝이는 시냅스

알고리즘 이론 & 풀이/프로그래머스

프로그래머스 Lv.0 | 구슬을 나누는 경우의 수

2023. 7. 7. 02:46

문제

https://school.programmers.co.kr/learn/courses/30/lessons/120840

 

 

💻 풀이

원래 5, 6, 7, 28, 33, 34, 35번 테스트 케이스에서 에러가 났다.

원인을 찾아보니까 balls와 share가 최대 30인데 곱셈을 축적해서 팩토리얼을 구하는 방식으로는 값을 감당하지 못해서 그런거였다. 분수 부분 결과값이 너무 커서 그런가 생각해서 factorial(balls) / factorial(balls - share) / factorial(share)로 이 부분을 바꿔봤는데도 틀린다. 내 생각에는 여전히 수가 크기때문에 계속 부동소수점 이슈가 발생하는 듯 싶다. 그래서 그냥 BigInt()를 씌워서 아래와 같이 풀었다.

function solution(balls, share) {
    return factorial(balls) / (factorial(balls - share) * factorial(share));
}

function factorial(n) {
    return Array.from({length: n}, (v, i) => i + 1).reduce((acc, curr) => acc *= BigInt(curr), BigInt(1));
}

 

약간 더 개선한 버전 - n개 중 m개를 선택할 때 m = 0, m === n인 경우 결과값이 1이라는 것을 이용해 약간 최적화할 수 있다.

function solution(balls, share) {
    if(share === 0 || balls === share) return 1;
    return factorial(balls) / (factorial(balls - share) * factorial(share));
}

function factorial(n) {
    return Array.from({length: n}, (v, i) => i + 1).reduce((acc, curr) => acc *= BigInt(curr), BigInt(1));
}

'알고리즘 이론 & 풀이 > 프로그래머스' 카테고리의 다른 글

프로그래머스 Lv.0 | 문자열 계산하기  (0) 2023.07.08
프로그래머스 Lv.0 | 공던지기  (0) 2023.07.08
프로그래머스 Lv.0 - 직각삼각형 출력하기 +) nodejs readline  (0) 2023.07.06
프로그래머스 Lv.0 | 최빈값 구하기  (0) 2023.07.05
프로그래머스 Lv.0 | 분수의 덧셈  (0) 2023.07.02
    '알고리즘 이론 & 풀이/프로그래머스' 카테고리의 다른 글
    • 프로그래머스 Lv.0 | 문자열 계산하기
    • 프로그래머스 Lv.0 | 공던지기
    • 프로그래머스 Lv.0 - 직각삼각형 출력하기 +) nodejs readline
    • 프로그래머스 Lv.0 | 최빈값 구하기
    페블_
    페블_

    티스토리툴바