엘리스 SW 엔지니어 트랙 2주차가 시작됐다.
1주차는 html/css git에 대해 배웠고 2주차는 자바스크립트 주간이다.
사실 1주차 때 git 때문에 곤혹을 치룬지라 걱정을 많이 했는데 첫 날인 오늘은 프리트랙 당시 배웠던 자바스크립트 내용을 복습하는 날인지라 어려운 내용은 크게 없었던 것 같다. 아,,, 문제에서 삽질을 좀 했나,,,?
오늘 그나마 어려운 문제라고 하면 소수 출력하기와 1부터 200까지의 숫자 중 소수 찾아 더하기 문제였다.
소수라 함은 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다.
// 매개변수 n이 소수라면 true를, 소수가 아니라면 false를 반환합니다.
function isPrime(n) {
let divisor = 2;
if (n == 1) return false;
while (n > divisor) {
if (n % divisor === 0) {
return false;
} else {
divisor++;
}
}
return true;
}
// 아래 부분은 채점을 위해 작성되었습니다. 수정하지 마세요.
for (var i = 11; i <= 20; i++) {
document.writeln(i, isPrime(i));
}
위 내용이 소수를 출력하는 방법인데 결과 값은 아래와 같다.
11true 12false 13true 14false 15false 16false 17true 18false 19true 20false
이 코드는 입력된 숫자가 소수인지 판별하는 함수인 isPrime()를 정의.
함수는 입력된 숫자가 1이라면 false를 반환하고, 그 외의 숫자라면 2부터 입력된 숫자까지 나누어 떨어지는 숫자가 있는지 확인한다.
만약 나누어 떨어지는 숫자가 있다면 false를 반환하고, 나누어 떨어지는 숫자가 없다면 true를 반환한다.
또한 코드의 마지막 부분은 11부터 20까지의 숫자가 소수인지 판별하는 코드다.
소수 구하는 방법 까먹어서 한참 삽질했다.
/*지시사항을 따라 작성해주세요*/
let count = 0;
// 2부터 시작하여 200까지의 모든 수를 검사
for (let i = 2; i <= 200; i++) {
let isPrime = true;
// 2부터 i-1까지의 모든 수로 나누어 떨어지는지 검사
for (let j = 2; j < i; j++) {
if (i % j == 0) {
isPrime = false;
break;
}
}
// 소수인 경우 출력
if (isPrime) {
count += i;
}
}
document.write('1이상 200이하의 소수의 합 = ' + count);
두번 째 소수 문제. 이번에는 1부터 200까지의 소수 합을 구하는 문제다.
문제를 풀었을 때 i % 2 !== 0으로 소수를 구하려고 했다가 말도 안되는 숫자가 나오니 한참 머리를 쥐어짰다.
위에 소수 문제 풀어놓고 다시 원점으로 돌아온 나 자신 칭찬한다.
내가 소수 문제 풀어놨단 것도 까먹고 있었던 것 같다.
여튼 이 코드는 1이상 200이하의 소수의 합을 구하면 된다.
우선 변수 count를 0으로 초기화, 그리고 2부터 200까지의 모든 수를 검사하기 위해 for 루프를 사용한다.
각 수를 검사하기 위해 또 다른 for 루프를 사용한다.
이 루프는 2부터 i-1까지의 모든 수로 나누어 떨어지는지 검사한다.
만약 나누어 떨어지면 isPrime 변수를 false로 설정하고 루프를 빠져나간다.
만약 나누어 떨어지지 않는다면 isPrime 변수는 true로 유지된다.
마지막으로 isPrime이 true인 경우 count 변수에 해당 수를 더한다.
모든 수를 검사한 후 count 변수에 저장된 값을 출력한다.
이렇게 소수 문제를 두개 풀어봤다. 확실히 짚고 넘어가야할 것 같아서 이렇게 예제 코드를 두개 적어서 해설까지 적어봤다.
이제 까먹지 말고 확실히 알고 넘어가자.