소수(Prime Number)를 구하는 알고리즘은 기초 중의 기초 같은 느낌이다.
소수를 구하는 알고리즘을 조작해보고, 직접 테스트 케이스를 작성해보는 것이 이번 과제의 목표이다.
소수란 무엇인가?
- 소수는 1보다 크면서, 1과 자기 자신으로 나눴을 때만 나누어 떨어지는 수이다.
- 그러므로 1과 음수는 소수가 아니며, 2와 4같은 약수가 있는 수는 소수가 아니다.
문제)
파라미터로 숫자를 받는 함수를 작성하시오.
인수가 소수이면 true를, 합성수이면 false를 반환하시오.
즉, 아래를 해결할 수 있는 함수를 작성하시오.
result = isPrime1(2) // true
result = isPrime1(1) // false
result = isPrime1(8) // false
result = isPrime1(13) // true
풀이)
소수의 조건을 잘 보고 해답을 천천히 구상한다.
소수가 되려면 1보다 커야한다. 즉 1 이하의 수는 소수가 아니다 = false
나누어 떨어지는 수가 처음 입력한 수와 같으면 소수이다 = true
나누어 떨어지는 수가 처음 입력한 수와 다르면 소수가 아니다 = false
const isPrime1 = (num, i = 2) => {
if (num < 2) return false
if (num === i) return true
if (num % i === 0) return false
return isPrime1(num, i + 1)
}
- 2보다 작으면 false를 반환한다.
- 처음 입력한 수(num)와 나누는 수(i)가 같아지면 true를 반환한다.
- num과 i를 나눈 값이 0이면 false를 반환한다.
- isPrime1에 i를 1 증가시키며 재귀한다.
주의) 여기서 2번과 3번이 바뀌면 어떤 수라도 false를 반환하게 된다. (절차적으로 진행되기 때문)
테스트 케이스 작성
테스트 케이스 프로그램은 jest를 사용한다.
반드시 필수는 아니지만 내가 작성한 함수를 테스트할 때 굉장히 도움이 된다.
describe('Prime Number 확인', () => {
it('음수값을 넣었을 때', () => {
const num = -5
const result = fn.isPrime1(num)
expect(result).toEqual(false)
})
it('소수를 넣었을 때', () => {
const num = 7
const result = fn.isPrime1(num)
expect(result).toEqual(true)
})
it('합성수를 넣었을 때', () => {
const num = 8
const result = fn.isPrime1(num)
expect(result).toEqual(false)
})
})
테스트가 잘 진행되었으며, solution이 통과되었다.
'Javascript' 카테고리의 다른 글
Closure UI (덧셈 Closure 활용) (0) | 2022.08.05 |
---|---|
소수 생성기 (0) | 2022.08.04 |
입력한 숫자 만큼 문자열 뒤쪽 출력하기 (0) | 2022.08.02 |
(자바스크립트) 문자열 (0) | 2022.08.02 |
고찰 (조건식에 boolean 값을 넣었을 때) (0) | 2022.08.02 |