일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 리스트
- 노마드코더
- 시스템 소프트웨어
- RARP
- OSI7계층모델
- GIT
- 이것이 취업을 위한 코딩 테스트다
- 이것이 취업을 위한 코딩테스트다
- 파이썬 정렬
- 컴퓨터네트워크
- 자료형
- 데이터통신
- icmp
- 컴퓨터 동작방식
- 이코테
- sort()
- 쿠키
- 데이터 통신과 컴퓨터 네트워크
- 라우팅
- IT5분잡학사전
- data type
- 기억장치
- 쉽게 배우는 데이터 통신과 컴퓨터 네트워크
- 파이썬 연산자
- CS
- ARP
- 노개북
- 북클럽
- 파이썬 자료형
- DP
- Today
- Total
뚝딱햄 탈출기
[JavaScript] 엘리스 트랙 - 소수의 합 본문
소수의 합 구하기
1부터 200사이의 소수의 합을 구해봅시다.
지시사항
반복문과 조건문을 이용해 1이상 200이하의 자연수 중 소수를 판별하고, 그 합을 구해 solution 함수 안에서 return 하세요.
Tips!
소수는 1과 자기 자신만을 약수로 가지는 수
내 오답
// 지시사항을 참고하여 solution 함수 안에 코드를 작성하세요.
function solution() {
let sum = 0;
let i, j;
for (i = 2; i <= 200; i++){ // 1은 소수가 아님.
for (j = 2; j < i; j++){ // 소수는 1과 자기자신 외에 나누어 떨어지지 않으므로 2와 자기자신보다 작은 수 사이에서 약수 찾음.
if (i % j === 0){ // 2와 자기자신-1 사이의 수 중 약수가 있으면 소수 X.
break; // for 문 종료, i++.
} else {
sum += i;
}
}
}
return sum;
}
// 실행 혹은 제출을 위한 코드입니다. 지우거나 수정하지 말아주세요.
module.exports = solution;
오답 원인
약수가 없을 경우 (= else) sum += i; 후에 j++ 되는데, 여기서 sum += i; 를 하면 i의 약수가 아닌 j 가 나올 때마다 sum += i 발생.
=> ex) i = 15 이면 j = 2 일 때 sum += i; 발생. i = 25이면 j = 2, 3, 4 일 때 sum += i; 발생.
=> else 블록 내부에서 sum += i; 수행하면 안된다.
정답
// 지시사항을 참고하여 solution 함수 안에 코드를 작성하세요.
function solution() {
let sum = 0;
let i, j;
for (i = 2; i <= 200; i++){ // 1은 소수가 아님.
let isPrime = true;
for (j = 2; j < i; j++){ // 소수는 1과 자기자신 외에 나누어 떨어지지 않으므로 2와 자기자신보다 작은 수 사이에서 약수 찾음.
if (i % j === 0){ // 2와 자기자신-1 사이의 수 중 약수가 있으면 소수 X.
isPrime = false; // 소수가 아니면 변수 isPrime의 값을 false로 바꿈.
break; // for 문 종료, i++.
}
}
if (isPrime){
sum += i; // isPrime이 참일 때만 수행.
}
return sum;
}
// 실행 혹은 제출을 위한 코드입니다. 지우거나 수정하지 말아주세요.
module.exports = solution;
isPrime 이란 변수를 생성하고, boolean 값으로 소수 판별.
판별 후 소수의 합을 sum 에 넣기.
정답 2 - 사이트 제공 답안
function solution() {
var sum = 0;
for (var i = 1; i <= 200; i++) {
for (var j = 2; j < i; j++) {
if (i % j == 0) {
break;
}
}
if (j == i) { // i % j != 0 인 경우에만 수행됨.
sum += j;
}
}
return sum;
}
isPrime 이라는 새로운 변수를 생성하지 않는다.
j의 범위를 2부터 자기자신 - 1 까지로 지정했고, i % j == 0 이면 break문으로 인해 for ( var j ~)문 종료되고 i++.
if (j == 1) {sum += j;} 문은 if (i % j == 0) {break;}문이 거짓일 때 (= 2와 자기자신 - 1 사이의 수 중 약수가 없을 때) (= 소수일 때) 수행됨.
if (j == 1) {sum += j;} 문은 for (var j ~) 문이 break; 문에 도달하지 않고 종료되었을 때 수행.
=> j < i; j++ 이므로 j === i
이 문제에서 기억할 것
1은 소수가 아니다.
for 문 내부의 if 문에서 break;를 하더라도 for문이 종료된다. (if문 종료 아님)
isPrime 같이 필요에 의해 변수를 새로 생성하는 방향으로도 풀이할 수 있다.
'Algorithm & Data structure > 알고리즘 문제 풀이' 카테고리의 다른 글
[Python][프로그래머스 lv.0] 120809. 배열 두 배 만들기 : for문, 리스트 컴프리헨션 (0) | 2023.10.03 |
---|---|
[JavaScript][프로그래머스 lv.0] 120809. 배열 두 배 만들기 : map() (0) | 2023.08.11 |
[JavaScript] 엘리스 트랙 - 3, 6, 9 게임 (0) | 2023.08.10 |
[JavaScript] 엘리스 트랙 - 집에 가는 길 : 변수 선언 (0) | 2023.08.09 |
[JavaScript] 엘리스 트랙 - 함수 만들고 호출하기 (0) | 2023.08.09 |