[알고리즘 예제 1]
어떤 수 n이 소수인지 판별해라.
- 소수라는 것의 정의가 '1과 자기자신 이외에는 약수를 갖지 않는 수' 여서 이렇게 코드를 짜봤다.
내 코드
function abc(num) {
for ( i = 2; i < num; i++ ) {
if ( num / num === 1 && num % i !== 0 ) {
return true;
} else {
return false
}
}
}
console.log(abc(25)); // true
처음에 이렇게 풀어봤는데 25를 넣었더니 true가 나왔다.
그 외에 24를 넣어도, 12를 넣어도 true가 나온다.
12, 24, 25는 소수가 아닌데.. 무엇이 잘못 되었을까?
그 이유는 바로
반복문 안에 여러 개의 return 문이 있을 때, 첫 번쨰 반복에서 return이 실행되면
함수는 즉시 종료되어 남은 반복이 실행되지 않는다!
즉, 저 코드에서는 무슨 수를 넣어도 첫 번째 조건인 num / num === 1 에 부합하여 무조건 return true; 가 실행되기 때문에 두 번째 조건까지는 가보지도 못하고 함수가 종료되는 것!
=> 그렇기 때문에 반복문 안에 조건문이 있고 그 안에 다시 return문이 있다면 조건은 하나만 넣어줘야 한다는 걸 배웠다.
- 그럼 저 코드에서 반복문 안의 조건문에는 하나의 조건만 넣어서 고쳐보자.
수정한 코드
function abc(num) {
// 원래 하나의 조건문에 두 개였던 조건을 나누어 두 개의 조건문을 만들었다.
if (num / num !== 1) { // 이 조건문은 num/num 의 값이 i 의 영향을 받지 않기 때문에 사실 반복문 안에
return false; // 들어가도 상관은 없지만, 좀 더 깔끔한 코드를 위해 뺐다.
}
for ( let i = 2; i < num; i++ ) {
if ( num % i === 0 ) {
return false;
}
else {
return true;
}
}
};
console.log( abc( 18 ) ); // false
오늘의 느낀 점
오늘 배운 게 정말 많지만 이것을 TIL 에 올린 이유는 아주 기본적인 것인데 내가 몰랐던 것이기 때문이다.
후 쫌,, 힘들다ㅠㅠ 알고리즘 공부하느라 강의를 못 들어서 월요일까지인 과제 제출을 토요일에나 시작할 수 있을 것 같다.
휴우...
'TIL' 카테고리의 다른 글
2024.01.08 TIL #Generator함수 #값 교환하기 (2) | 2024.01.08 |
---|---|
2024.01.05 TIL 새로 알게 된 점 #While문 안의try catch문 #setter 메서드 (1) | 2024.01.05 |
2024.01.03 TIL #명시적 This binding #apply #bind (0) | 2024.01.03 |
2024.01.02 TIL #오름차순 #sort #replace(a,b) (1) | 2024.01.02 |
2023.12.29 TIL Javascript #object #객체 메소드 #객체비교 #객체병합 (1) | 2023.12.29 |