전에 정리한 js의 대표적인 반복문인 for를 복습해보자.
for의 ()
안에는 초기값; 조건식; 증갑식
이 들어가고 코드블럭{}
을 작성한다.
for (초기값; 조건식; 증감식) {
// 실행할 코드
}
또 반복문은 중첩이 가능해 반복문 내부에 또 다른 반복문을 사용할 수 있다.
for (let i = 1; i <= 6; i++) {
for (let j = 1; j <= 6; j++) {
console.log(`첫번째 주사위는 ${i}, 두번째 주사위는 ${j}입니다.`);
}
}
이를 바탕으로 코플릿 반복문 문제를 풀어보자
문제 : 1 이상의 자연수를 입력받아 소수(prime number)인지 여부를 리턴
입력 : 인자 1:num ->number
타입의 수
출력 :boolean
타입을 리턴해야한다.
입출력 예시
let output = isPrime(2);
console.log(output); // --> true
output = isPrime(6);
console.log(output); // --> false
output = isPrime(17);
console.log(output); // --> true
먼저 소수에 대해 짚고 넘어가자.
1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다.
즉, 소수의 조건은
1. 소수는 1보다 커야한다.
2. 2를 제외한 짝수는 소수가 아니다.
3. 3부터 num 전까지 나누어 떨어지는 경우 소수가 아니다.
이 세가지로 정리할 수 있다.
이제 의사코드를 작성해보자
// 조건 1을 만족시키기 위해 num을 1로 지정해보고 결과값을
false
로 정하자
// 조건 2를 만족시키기 위해 num을 2로 지정해보고 결과값을true
로 정하자
// 조건 3을 만족시키기 위해 num을 2로 나눈 나머지값을 0으로 지정해false
로 정하자.
// 입력은number
이다
// 출력은boolean
이다.
이제 코드를 작성하자.
function isPrime(num) { if (num === 1) { //만약 num이 1이면 소수 조건 x return false; // false }
조건 1 작성
function isPrime(num) { if (num === 1) { //만약 num이 1이면 소수 조건 x return false; // false }if (num === 2) { //만약 num이 2면 소수 조건 o return true; // true }
조건 2 작성
function isPrime(num) { if (num === 1) { //만약 num이 1이면 소수 조건 x return false; // false }if (num === 2) { //만약 num이 2면 소수 조건 o return true; // true }if (num % 2 === 0) { //만약 2로 나눈 나머지 값이 0 이면 소수 조건 x return false; // false }
조건 3 작성
여기까진 소수인지를 확인하는 조건을 적은 코드이다.
반복문을 추가하여 num값에 따라 결과를 추이해보자
function isPrime(num) { if (num === 1) { //만약 num이 1이면 소수 조건 x return false; // false }if (num === 2) { //만약 num이 2면 소수 조건 o return true; // true }if (num % 2 === 0) { //만약 2로 나눈 나머지 값이 0 이면 소수 조건 x return false; // false } for (let i = 3; i < num; i++) { //3부터 num이전까지 1씩 증가 if (num % i === 0) { //만약 num을 i로 나눈 나머지가 0이면 소수조건 x return false; // false } } return true; //이 외 나머지는 소수이다 }
반복문 안에 조건문을 추가하여 소수 조건 여부를 확인하였고
마지막은 그 외의 나머지들은 소수로 출력이 되어 true
로 리턴시켜 테스트하였다.
문제를 보기만하면 막막했는데 의사코드를 먼저 작성해 생각을 정리하고
코드를 순차적으로 작성을 하면서 훨씬 수월가헤 진행할 수 있었다.
아직 문제 하나 푸는데도 오랜 시간이 걸리지만 꾸준히 노력해 더 성장해야겠다