홀짝에 따라 다른 값 반환하기
문제 설명
양의 정수 n이 매개변수로 주어질 때,
n이 홀수라면 n 이하의 홀수인 모든 양의 정수의 합을 return 하고
n이 짝수라면 n 이하의 짝수인 모든 양의 정수의 제곱의 합을 return 하는 solution 함수를 작성해 주세요.
제한사항
1 ≤ n ≤ 100
[ 내가 푼 방식 ]
사실 홀수의 합은 공식을 모르는 상태에서 직접 규칙성을 발견해 코드를 작성했다.
check point!
n이하의 홀수들의 합에 대해 내가 찾은 규칙
n이하의 홀수들의 갯수 = n /2 + 1
홀수들의 합 = 홀수들의 갯수의 제곱
짝수도 동일한 방법으로 규칙을 찾아보려고 했지만 실패했다.
그래서 짝수들의 제곱의 합은 반복문으로 작성했다.
그런데 반복문으로 작성하니까 확실히 처리 속도가 떨어진다.
[다른 사람들이 푼 방식]
다른 사람들이 작성한 코드들을 찾아보다가 신기한 방식을 찾았다.
반복문을 전혀 사용하지 않고 수학 공식으로 해결한 사례이다.
이 공식이 궁금해서 검색해보니 아래의 글을 찾았다.
check point!
반복문 대신 공식으로 문제 풀기
자연수 제곱의 합
홀수들의 합 공식
1~n까지의 자연수가 있을 때 n이 짝수일 경우, ( n / 2 )²
1~n까지의 자연수가 있을 때 n이 홀수일 경우, ( ( n + 1 ) / 2 )²
짝수들의 합 공식
1~n까지의 자연수가 있을 때 n이 짝수일 경우, n² + n
1~n까지의 자연수가 있을 때 n이 홀수일 경우, (n-1)² + (n-1)
자연수 제곱의 합 공식
1~n까지의 자연수가 있을 때 이 자연수들의 제곱의 합은 n(n+1)(2n+1)/6이다.
그리고 자연수들의 제곱의 합은 홀수들의 제곱의 합 + 짝수들의 제곱의 합과 같다.
홀수들의 제곱의 합 공식
(n * (4n^2 - 1)) / 3
짝수들의 제곱의 합 공식
n*(n+1)*(n+2)/6
[ 내가 다시 풀어본 방식 ]
위의 공식들을 이용해서 반복문 없이 코드를 작성해보았다.
확실히 처음에 작성했던 반복문이 들어간 코드보다 처리 속도가 빨라졌다.
수학 공식만 알고 있었어도 반복문을 쓰는 번거로운 방식을 사용하지 않고 빨리 풀 수 있는 문제였는데 아쉽다.
수학 공부 다시 시작해야 하나...
그래도 홀수 합 구하는 공식은 몰랐지만 규칙성을 가지고 내가 공식을 만들어낸(사실은 찾아낸)것이 기특하기도 하다.
[ 추가적으로 변수 선언 안하고 바로 조건문으로 작성했을 때 비교 ]
여기서 변수 선언 안하고 바로 삼항 연산자 조건문으로 풀어버리면 처리속도가 더 빠르긴한데 코드 가독성을 생각하면 변수로 값을 관리하는 것이 더 좋은 코드 같기도 하다.
'알고리즘 > JavaScript' 카테고리의 다른 글
프로그래머스 / 코딩 기초 트레이닝 / 수 조작하기 1 (0) | 2023.09.18 |
---|---|
프로그래머스 / 코딩 기초 트레이닝 / 등차수열에 특정한 항만 더하기 (0) | 2023.09.17 |
프로그래머스 / 코딩 기초 트레이닝 / 공배수 (0) | 2023.09.16 |
프로그래머스 / 코딩 기초 트레이닝 / n의 배수 (0) | 2023.09.16 |
프로그래머스 / 코딩 기초 트레이닝 / 덧셈식 출력하기 (0) | 2023.09.15 |