Algorithm JS | 프로그래머스 코딩테스트_팩토리얼

앙두·2023년 3월 23일
0

Algorithm

목록 보기
1/17

📑 문제

  • i! 는 1부터 i까지 곱한다는 뜻
  • i 가 5일 경우 : 54321
  • 곱한 수가 n보다 작거나 같아야 한다.
  • 곱한 수 중에 제일 큰 수를 return

🤓 나의 풀이

function solution(n) {
    let res = 1
  	for(let i = 1; i < 11; i++) {
    res *= i
    if(res === n) { return i }
    else if(res > n) { return i-1 }
  }
    return i
}
  • 1부터 순차대로 곱해줘야 하기 때문에, for문을 사용합니다.
  • 제한 조건이 0 < n ≤ 3,628,800 이었기 때문에 for문의 조건부를 i < 11로 설정합니다.
  • let으로 res를 1로 선언해주고, res * i 로, 곱해질때마다 res에 할당시켜줍니다.
  • 곱해진 숫자(res)가 인자(n)와 같은 경우, 가장 최근에 곱한 i가 반환됩니다.
  • 아니면, 곱해진 숫자(res)가 인자(n)보다 커진 경우, 가장 최근에 곱한 i에 빼기 1을 하여 반환해줍니다.

👍🏻 제일 간단한 풀이 (다른 사람들의 풀이 참고)

function solution(n) {
    for(let i = 1, v = 1; true; v *= ++i) if(v > n) return --i;
}

내가 했던 풀이와 거의 비슷한 것 같긴한데, 훨씬 간결하다.
for문 내에 i와 v를 1로 선언해주고 (2개 선언도 가능했구나..)
조건은 항상 true로 (조건부자리에 boolean 값만 넣는 것도 가능했구나..)
그리고 v 에 1씩 상승하는 i가 v와 곱해져서 계속 v에 할당되게 한다. (계산식을 넣는 것도 가능했구나..)

v = 1 * 2
v = 2 * 3
v = 3 * 4
.
.
.

이런 식으로 계속 곱해지게 된다.
++i를 사용하셨구나... (i++ 는 1부터 더해지기 시작, ++i는 1이 더해져서 시작(=2부터))
그래서 인자로 넘겨준 숫자(n)보다 v가 커지게 되면, i에서 1을 빼서 반환해준다.
n보다 작은 숫자여야 하니까, 그전까지 곱했던 i가 반환돼야 하기 때문이다.

어찌보면 내 풀이와 미세한 연산 변형의 차이처럼 보이지만,
저 지식들은 경험의 노하우에서 얻어지는 지식들이라, 천지차이다! 😱

그래도 3달전의 나는 전혀 못 풀었을 것 같은데, 영차영차 지금은 혼자 풀어낸 것 같아서 만족하구 감사링 ❤️‍🔥

끗!

profile
쓸모있는 기술자

0개의 댓글