LeeWang_31
이왕31
LeeWang_31
전체 방문자
오늘
어제
  • 분류 전체보기 (234)
    • 프로젝트 (2)
      • 사이드 프로젝트 (2)
      • Codestates_pre_project (0)
    • 프론트엔드 (169)
      • Html (19)
      • CSS (18)
      • JavaScript (29)
      • Codestates (76)
      • 코딩노트 (27)
    • 백엔드 (10)
      • node (10)
    • 구르는 돌 🌑 (16)
      • Codestates (11)
      • 생각 (4)
      • 공부 흔적 (1)
    • 정보 (18)
      • 오류노트 (2)
      • 인텔리제이 정보 (9)
      • 깃 정보 (3)
      • 기타 정보 (4)
      • 안드로이드스튜디오 정보 (0)
    • CS (7)
      • 이론공부 (7)
    • App (6)
      • Android (3)
      • Kotlin (3)
    • 컴퓨터 수학 (5)
      • 암호론 (5)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 웹팩
  • 생활코딩
  • 알고리즘
  • 안드로이드스튜디오파이어베이스
  • 코플릿
  • 사이드프로젝트
  • TODOlist
  • codestate
  • UI/UX
  • 코딩애플
  • 코드스테이츠
  • 1292
  • css
  • 사용자 친화 웹
  • html
  • 안드로이드스튜디오범블비
  • 번들링
  • ubuntu
  • 백준
  • 파이어베이스연동
  • DP
  • linux
  • React
  • 2693
  • 자바스크립트
  • figjam
  • linuix 코드스테이츠
  • 사용자친화웹
  • 2609
  • JavaScript

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
LeeWang_31

이왕31

[코플릿]power
프론트엔드/코딩노트

[코플릿]power

2022. 11. 14. 23:35

✅문제

두 수를 입력받아 거듭제곱을 리턴해야 합니다.

✅입력

인자 1: base

  • number 타입의 자연수 (base >= 2)

인자 2: exponent

  • number 타입의 정수 (exponent >= 0)

✅출력

  • number 타입을 리턴해야 합니다.
  • 실제 계산 결과를 94,906,249로 나눈 나머지를 리턴해야 합니다.

💬입출력 예시

let output = power(3, 40);
console.log(output); // --> 19334827

🍀제출 및 설명

function power(base, exponent) {
    if (exponent === 0) return 1;

    const half = parseInt(exponent / 2);
    const temp = power(base, half);
    const result = (temp * temp) % 94906249;

    if (exponent % 2 === 1) return (base * result) % 94906249;
    else return result;
}

무식하게 곱셈만 하면 시간 초과가 나온다

아래는 나름 dp라고 풀어 봤는데 효율이 안나왔다.

 

다음 풀이는 exponent를 계속 절반씩 나눈다.

나눠진 수가 n.5처럼 소수의 유리수의 형태일 경우 parseInt이기 때문에 소수부분은 무시되고 정수만 출력되 n만 출력 된다.

base파트와 절반으로 나눠진 half는 다시 power로 보내져 exponent가 0이 될때 까지 반복한다.

 

돌아온 값이 temp에 저장이 되면 두 값을 곱하여 다시 반으로 나눠지기전 exponent만큼 곱해진 모양을 만든다.

이떄 exponent가 홀수 였을 경우출력 값에 base를 곱하고 출력한다.

✨다른 풀이

function power(base, exponent) {
    // todo: 여기에 코드를 작성합니다.
    let arr = new Array(exponent + 1)
    arr[0] = 1
    arr[1] = base;
    for(let i = 2;i<=exponent;i++){
        arr[i] = arr[i-1]*base%94906249
    }
    return arr[exponent]
}​
저작자표시 (새창열림)

'프론트엔드 > 코딩노트' 카테고리의 다른 글

[알고리즘] 다이나믹 프로그래밍  (0) 2022.11.14
[백준]11726/2×n 타일링/JavaScript  (0) 2022.11.14
[백준]2193/이친수/JavaScript  (0) 2022.11.14
[백준]1463/1로 만들기/JavaScript  (0) 2022.11.14
[백준]2775/부녀회장이 될테야 /JavaScript  (0) 2022.11.14
    '프론트엔드/코딩노트' 카테고리의 다른 글
    • [알고리즘] 다이나믹 프로그래밍
    • [백준]11726/2×n 타일링/JavaScript
    • [백준]2193/이친수/JavaScript
    • [백준]1463/1로 만들기/JavaScript
    LeeWang_31
    LeeWang_31
    이왕 할 거면 기분 좋게

    티스토리툴바